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);
人们有这些问题,但似乎没有解决办法。我看到响应,比如你的图太大或太深,但我的对象图很小,我只是多次调用上面的代码(每个对象一次)。我需要解决这个问题。
您使用的是延迟加载,所以NHibernate会在这里和那里传递代理,这些代理引用了一个System.Type
对象,该对象将有无尽的循环,还引用了会话和会话工厂,该会话和工厂本身将很重,请检查NHibernate.Proxy.INHibernateProxy
。
所以要么:
- 急于加载要序列化的东西或
- 直接指定要序列化的属性或
- 不要将实体全部序列化在一起