我正在尝试通过 ASP.NET MVC 前端层从我的服务器返回一个 JSON 列表:
var stuff = repo.GetStuff();
return Json(stuff);
但是,我收到一条错误消息,而不是预期的 JSON
序列化“System.Reflection.RuntimeModule”类型的对象时检测到循环引用。
我想我已经找到了发生这种情况的地方,但是为了解释它,我需要一个简单的示例域模型,如下所示:
我正在(懒惰地?)从 NHibernate 加载一系列文档,如下所示:
var session = getNHibernateSession();
var query = new NhQueryable<Document>(session.GetSessionImplementation());
var docs = query.ToList().AsEnumerable();
JsonResult
然后我传递文件以在我的控制器中返回 a :
return Json(docs, JsonRequestBehavior.AllowGet);
现在,当Json()
对集合进行序列化时,它会遍历文档的属性,找到一个人。它序列化那个人,并找到一个项目。它对项目进行序列化,并再次找到 - 没错 - 那个人!由于我是延迟加载,所以如果没有什么能阻止它,它可以一直走下去,但它会因循环引用错误而停止。
我真的不需要降低所有这些级别(如果不首先加载项目我会很好) - 我可以以某种方式影响Json()
这个集合的序列化方式,而不是进一步降低,比如说,降低 2 级吗?我搜索了一下,但我发现的大部分内容似乎来自那些决定直接使用序列化库的人,而不仅仅是使用 .NET MVC 中的内置功能。(注意:这个问题的解决方案必须可以专门应用于这种情况,因为我可能想要在应用程序的其他地方获取人员的 JSON 列表,包括项目......)