所有
环境: 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);
人们有这些问题,但似乎没有解决方案。我看到你的图表响应很大或太深但我的对象图很小, - 我只是多次调用代码(每个对象一次)。我需要修复此问题。
答案 0 :(得分:3)
你正在使用延迟加载,所以NHibernate在这里和那里交回代理,这些代理引用了一个System.Type
对象,它将有无限循环,还有对会话和sessionfactory的引用,这将自己很重,检查NHibernate.Proxy.INHibernateProxy
。
所以: