Newtonsoft Json - OutOfMemoryException

时间:2014-09-18 17:20:35

标签: c# asp.net nhibernate json.net

所有

环境: ASP.net 2.0,Nhibernate 3.3,Json.net(最新,6.x)

我正在使用最新版本的Newtonsoft.Json库。当我使用nhibernate加载一个实体(我的实体引用其他实体并且懒惰地加载)时,我收到内存不足异常或stackoverflow异常。

outofmemory例外代码:

JsonSerializerSettings settings = new JsonSerializerSettings();
    settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
    string json = JsonConvert.SerializeObject(container.DataItem, settings);

stackoverflow异常代码:

JsonSerializerSettings settings = new JsonSerializerSettings();
    settings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
    settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
    string json = JsonConvert.SerializeObject(container.DataItem, settings);

人们有这些问题,但似乎没有解决方案。我看到你的图表响应很大或太深但我的对象图很小, - 我只是多次调用代码(每个对象一次)。我需要修复此问题。

1 个答案:

答案 0 :(得分:3)

你正在使用延迟加载,所以NHibernate在这里和那里交回代理,这些代理引用了一个System.Type对象,它将有无限循环,还有对会话和sessionfactory的引用,这将自己很重,检查NHibernate.Proxy.INHibernateProxy

所以:

  • 急切地加载要序列化的内容或
  • 直接指定要序列化的属性或
  • 不要将所有实体序列化