EF4的循环引用

时间:2011-02-15 17:15:38

标签: c# jquery asp.net json entity-framework-4

我试图将带有子节点的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;
}

如果我不包括子项,则函数可以正常工作,但是对于子项,则会出现循环引用。我有什么想法可以解决这个问题吗?

3 个答案:

答案 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方法。