C# 循环引用EF4

C# 循环引用EF4,c#,jquery,asp.net,json,entity-framework-4,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.

我试图将一个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;
}

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

我也有同样的问题。我不确定是否还有其他解决方案,但我已将其用于创建自己的序列化方法。

尝试将ScriptIgnore属性添加到属性父级。有关更多详细信息,请参阅:

--编辑--

如果在设计器文件中执行此操作,它们将被覆盖。但您可以尝试添加元数据类型:

[MetadataType(typeof(TestMD))]
public partial class Test
{
}

public class TestMD
{
    [ScriptIgnore]
    public object Parent { get; set; }
}

您必须返回JSONObject吗?如果没有,可以尝试使用,这将正确处理循环引用:

var settings = new JsonSerializerSettings
                   {
                       ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                   };

JsonConvert.SerializeObject(object, Formatting.Indented, settings);

我的猜测是,
JsonObject
只是一个包装器,它将序列化实体并将其放入响应流,这非常简单,可以手动执行。

如果我这样做,我想每次构建模型时,我的更改都会被覆盖?即使在EF实体元数据中的所有引用类型上都使用ScriptIgnore,我仍然得到关于动态代理对象的循环引用:(这是一个绝密代码,或者你可以在这里或其他地方提供一个链接吗?我想不是……但是你的序列化方法应该根据你的应用程序工作。所以我的方法对你没有帮助。下面是我所做的(PS:ScriptIgnore对我不起作用):首先,我得到了用于序列化对象的模式(在我的情况下,我需要序列化,不像您那样添加项,但主体是相同的),但通常应该类似于{var1:'val1',var2:'val2'}等等……然后,基于该标准,您可以创建自己的序列化/“de”serialize方法。虽然有点粗糙,但这正是我的工作原理,我非常确定Json的serialize工作原理几乎相同。JSONObject是我自己的自定义类,带有一些属性,因此我可以在客户端确定返回的内容-例如,我有两个属性来处理两种不同类型的错误(异常和我自己的自定义异常类型)-通过这种方式,我可以根据返回的类型执行不同的操作。我可以轻松地返回另一种类型的对象,只要我在客户机上能够看到返回的是object、typeX还是typeY-建议的解决方案是否可以实现这一点?你能用你的JSONObject代码更新你的问题吗?我有点困难根据您的评论了解它的工作原理。不幸的是,我这里没有我的代码,但它是否会像编写以下代码一样简单:object myobject=Repository.Parent.Include(“Child.Child”).FirstOrDefault();string myjson=JsonConvert.SerializedObject(myobject,Formatting.Indented,settings);lJSONObject.Object=myjson;?我的类看起来像这样-非常简单:公共静态类JSONObject{public Object Object{get;set;}公共字符串异常{get;set;}公共MyException MyException{get;set;}}JSON.NET完成了这项工作-我可以将它与我自己的JSONObject一起使用:)问题的根源在于JSON无法处理循环引用