我是如何解决Json序列化循环引用错误的?

tre*_*orc 12 serialization json entity-framework

有岗位这里,询问如何通过返回EF4 CTP5序列化对象时,解决循环引用错误.我不久前在WCF Web表单项目中遇到了同样的问题.

我能够在我的WCF/Web表单项目和我的MVC3项目中"解决"这个问题.我认为这似乎不是什么类型的项目,因为这似乎是EF序列化的"事物".

我通过在我的ObjectContext构造函数中禁用ProxyCreation解决了这个问题,如下所示:

public class MyObjectContext : DbContext, IDbContext
{
     public MyObjectContext(string connectionStringName) : base(connectionStringName)
     {
        ((IObjectContextAdapter)this).ObjectContext.ContextOptions.ProxyCreationEnabled = false;
     }
     public DbSet<Product> Products {get;set;}
     //etc.
} 
Run Code Online (Sandbox Code Playgroud)

我的问题是:有人可以解释为什么这似乎可以解决这个问题吗?

我认为这个问题与我的POCO中的导航属性有关,但之后我感到难过.谢谢.

Lad*_*nka 9

如果关闭代理创建,也会关闭延迟加载.当实体序列化发生时,它会访问所有导航属性.如果启用了延迟加载,则会加载所有相关对象并尝试序列化它们.它再次访问所有属性,包括指向父对象的导航属性.此时,您必须说序列化此属性是循环引用,或者它将再次序列化对象并继续无限循环.

这里的技巧可能是使用该ScriptIgnore属性在子实体中注释您的循环导航属性.

  • ScriptIgnore不起作用,如果禁用代理创建,它可能会起作用. (2认同)