Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何转换反代理对象,以便将它们序列化为Json?_Javascript_Json_Nhibernate_Serialization_Lazy Loading - Fatal编程技术网

Javascript 如何转换反代理对象,以便将它们序列化为Json?

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

我想将一些对象序列化为Json。有时(不总是,我不知道是什么触发它)这些对象中的一个是代理,这会导致序列化程序抛出循环引用错误,即使没有循环引用:“序列化'System.Reflection.RuntimeModule'类型的对象时检测到循环引用。”

我的代码使用NHibernate和JavaScriptSerializer:

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.

谢谢-这个链接做到了: