我在应用程序中使用JavaScriptSerializer来序列化对象,但在尝试序列化来自数据实体的集合时遇到异常。
我的代码,
从数据库中获取记录。
var data = new MadhuDBEntities().ords.ToList();我使用JavaScriptSerializer序列化了上面的数据,如下所示
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,所以告诉解决方案使用它..

提前谢谢..
发布于 2013-11-26 14:08:20
试着这样做
首先,您必须创建类来像这样对对象进行反编译,您可以使用在线工具http://json2csharp.com/
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; }
}然后
System.Web.Script.Serialization.JavaScriptSerializer ObjJSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();{ RecursionLimit = 2 };序列化
var ObjSerialize = ObjJSerializer.Serialize("JsonObject");您可以使用
[ScriptIgnore] 此属性忽略该对象,这样就不会得到任何异常http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx
发布于 2013-11-26 14:16:58
如果您将数据更改为var data = MadhuDBEntities().ords.Take(5).ToList(),是否有效?
我认为这是因为您的查询返回了超过5个结果,并且您在JavaScriptSerializer中将RecursionLimit特别设置为5。
https://stackoverflow.com/questions/20209252
复制相似问题