我试图将带有子节点的Entity Framework 4对象返回到jQuery JSON AJAX函数,但是我得到一个循环引用错误 - 简而言之,我的方法看起来像这样
[WebMethod]
public static JSONObject Get()
{
WebHelper.JSONObject lJSONObject = new WebHelper.JSONObject();
lJSONObject.Object = Repository.Parent.Include("Child.Child").FirstOrDefault();
return lJSONObject;
}
如果我不包括子项,则函数可以正常工作,但是对于子项,则会出现循环引用。我有什么想法可以解决这个问题吗?
答案 0 :(得分:5)
你必须返回一个JSONObject吗?如果没有,您可以尝试使用Json.NET,它将正确处理循环引用:
var settings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
JsonConvert.SerializeObject(object, Formatting.Indented, settings);
我的猜测是JsonObject
只是一个包装器,它将序列化实体并将其放在响应流上,这很容易手动完成。
答案 1 :(得分:1)
尝试将ScriptIgnore属性添加到属性Parent。有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx
- 编辑 -
如果您在设计器文件中执行此操作,它们将被覆盖。但您可以尝试添加元数据类型:
[MetadataType(typeof(TestMD))]
public partial class Test
{
}
public class TestMD
{
[ScriptIgnore]
public object Parent { get; set; }
}
答案 2 :(得分:0)
我遇到了同样的问题。不确定是否有任何其他解决方案,但我让它工作创建我自己的Serialize方法。