Javascript 如何转换反代理对象,以便将它们序列化为Json?
我想将一些对象序列化为Json。有时(不总是,我不知道是什么触发它)这些对象中的一个是代理,这会导致序列化程序抛出循环引用错误,即使没有循环引用:“序列化'System.Reflection.RuntimeModule'类型的对象时检测到循环引用。” 我的代码使用NHibernate和JavaScriptSerializer:Javascript 如何转换反代理对象,以便将它们序列化为Json?,javascript,json,nhibernate,serialization,lazy-loading,Javascript,Json,Nhibernate,Serialization,Lazy Loading,我想将一些对象序列化为Json。有时(不总是,我不知道是什么触发它)这些对象中的一个是代理,这会导致序列化程序抛出循环引用错误,即使没有循环引用:“序列化'System.Reflection.RuntimeModule'类型的对象时检测到循环引用。” 我的代码使用NHibernate和JavaScriptSerializer: public static string Convert(object xiObject) { var lSerialiser = new JavaScriptSer
public static string Convert(object xiObject)
{
var lSerialiser = new JavaScriptSerializer();
return lSerialiser.Serialize(xiObject);
}
假定延迟加载已关闭,如中所示:
HasManyToMany(x => x.Managers)
.Not.LazyLoad();
这听起来很像这家伙的问题:
因此,我的计划是使用Json.net而不是JavaScriptSerializer,并在该页面上实现解决方案,但它看起来非常复杂。任何其他建议都很好。可能您可以在序列化对象之前“取消固定”对象。这篇文章展示了如何做到这一点-IMHO,正确的答案是“你不知道”。
您的实体(可能包含代理)属于您的业务域。您应该序列化DTO,它只包含客户端需要的内容,而不包含更多内容。
艾恩德 另外,最好不要在映射中设置延迟加载参数,而是根据正在执行的特定查询来决定是否延迟加载。再一次,Ayende.谢谢-这个链接做到了: