首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScriptSerializer RecursionLimitExceed异常

JavaScriptSerializer RecursionLimitExceed异常
EN

Stack Overflow用户
提问于 2013-11-26 13:32:14
回答 2查看 2.6K关注 0票数 1

我在应用程序中使用JavaScriptSerializer来序列化对象,但在尝试序列化来自数据实体的集合时遇到异常。

我的代码,

从数据库中获取记录。

代码语言:javascript
复制
var data = new MadhuDBEntities().ords.ToList();

我使用JavaScriptSerializer序列化了上面的数据,如下所示

代码语言:javascript
复制
JavaScriptSerializer jSerializer = new JavaScriptSerializer() { RecursionLimit = 5 };
string json=jSerializer.Serialize(data);

我得到的异常如下

我认为这是因为数据库中的记录包含附加值。

当在没有RecursionLimit的情况下串行化data时,我获得如下json数据,

[{"OrderID":1,"EmployeeID":1,"CustomerID":"Madhu","EntityState":2,"EntityKey":{"EntitySetName":"ords","EntityContainerName":"MadhuDBEntities","EntityKeyValues":[{"Key":"OrderID","Value":1}],"IsTemporary":false}},{"OrderID":2,"EmployeeID":1,"CustomerID":"Madhu","EntityState":2,"EntityKey":{"EntitySetName":"ords","EntityContainerName":"MadhuDBEntities","EntityKeyValues":[{"Key":"OrderID","Value":2}],"IsTemporary":false}}]

在上面实际上只有OrderID、EmployeeID和CustomerID是列,其他是自动添加的,我认为问题也是由于它们造成的。

那么,有没有办法序列化data而不使用不必要的条款呢?

任何想法来解决这个问题,但我必须使用JavaScriptSerializer,所以告诉解决方案使用它..

提前谢谢..

EN

回答 2

Stack Overflow用户

发布于 2013-11-26 14:08:20

试着这样做

首先,您必须创建类来像这样对对象进行反编译,您可以使用在线工具http://json2csharp.com/

代码语言:javascript
复制
public class EntityKeyValue
{
    public string Key { get; set; }
    public int Value { get; set; }
}

public class EntityKey
{
    public string EntitySetName { get; set; }
    public string EntityContainerName { get; set; }
    public List<EntityKeyValue> EntityKeyValues { get; set; }
    public bool IsTemporary { get; set; }
}

public class RootObject
{
    public int OrderID { get; set; }
   [ScriptIgnore]
    public int EmployeeID { get; set; }
    public string CustomerID { get; set; }
   [ScriptIgnore]
    public int EntityState { get; set; }
    [ScriptIgnore]
    public EntityKey EntityKey { get; set; }
}

然后

代码语言:javascript
复制
       System.Web.Script.Serialization.JavaScriptSerializer ObjJSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();{ RecursionLimit = 2 };

序列化

代码语言:javascript
复制
            var ObjSerialize = ObjJSerializer.Serialize("JsonObject");

您可以使用

代码语言:javascript
复制
       [ScriptIgnore] 

此属性忽略该对象,这样就不会得到任何异常http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx

票数 0
EN

Stack Overflow用户

发布于 2013-11-26 14:16:58

如果您将数据更改为var data = MadhuDBEntities().ords.Take(5).ToList(),是否有效?

我认为这是因为您的查询返回了超过5个结果,并且您在JavaScriptSerializer中将RecursionLimit特别设置为5。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20209252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档