一尘不染

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

json

有岗位这里,询问如何通过返回EF4CTP5序列化对象时,解决循环引用错误。不久前,我在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.
}

我的问题是:有人可以解释为什么这看起来可以解决问题吗?

我认为问题与POCO的导航属性有关,但此后我很困惑。谢谢。


阅读 464

收藏
2020-07-27

共1个答案

一尘不染

如果您关闭代理创建,那么您还将关闭延迟加载。实体序列化发生时,它将访问所有导航属性。如果启用了延迟加载,它将加载所有相关对象,并尝试对其进行序列化。再次访问其所有属性,包括指向父对象的导航属性。在这一点上,您必须说序列化此属性是循环引用,否则它将再次序列化对象并继续无限循环。

这里的窍门可能是用属性在子实体中注释循环导航ScriptIgnore属性。

2020-07-27