Newtonsoft Json-内存不足异常

本文关键字:异常 内存不足 Json- Newtonsoft | 更新日期: 2023-09-27 18:22:33

全部,

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

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

内存外异常代码:

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);

人们有这些问题,但似乎没有解决办法。我看到响应,比如你的图太大或太深,但我的对象图很小,我只是多次调用上面的代码(每个对象一次)。我需要解决这个问题。

Newtonsoft Json-内存不足异常

您使用的是延迟加载,所以NHibernate会在这里和那里传递代理,这些代理引用了一个System.Type对象,该对象将有无尽的循环,还引用了会话和会话工厂,该会话和工厂本身将很重,请检查NHibernate.Proxy.INHibernateProxy

所以要么:

  • 急于加载要序列化的东西或
  • 直接指定要序列化的属性或
  • 不要将实体全部序列化在一起