我想使用MVC控制器标准Json(object)
方法返回JsonResult
。我的对象Model1
由Fluent NHibernate构建。ASP.NET MVC JSON在功能NHibernate型号
Model1
具有Model2
类型的属性。在调试模式下,我看到环境创建了一个名为Castle.Proxies.Model2Proxy
的代理后代类Model2
。我相信Fluent Nhibernate会在内部使用它来满足我的映射。而在运行时,实际的model1.Model2的类型为Castle.Proxies.Model2Proxy
。
问题是,当我的Model1
被序列化时,Model2
也被序列化了。串行器似乎试图序列化这个对象的所有属性,包括由Castle生成并且不是我需要的那些属性。如果它没有引起异常,我会好的。也就是说,这个对象内的某个地方会出现一个循环引用,这个异常是由它引起的。这里是异常文本:
System.InvalidOperationException: A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'
我双重检查我的域名,并没有发现循环引用在那里,所以我责怪城堡。我对么?城堡真的应该为此负责吗?如果是这样,我有什么选择?如何让序列化程序忽略Castle属性?特别是,我怎么告诉它序列化定义类型,而不是实际的一个?
我倾向于覆盖我的域模型用的ViewModels打这个问题,这是一个推荐的做法,但我真的很想知道其他治疗,如果它存在。
'Model2'是否有任何机会引用其父'Model1'? –
不,它绝对是导致异常的Castle代理对象:它包含层次结构下的'Type'对象,它具有'RuntimeModule'引用。当然,这个模块在这个模块中包含的所有类型的集合中都包含对这个“Type”的引用。 –
如果您急于加载Model2然后将其序列化,是否会出现相同的错误? –