如何打开反代理对象,以便将它们序列化为Json

How can I turn de-proxy objects so that I can serialize them into Json?

本文关键字:序列化 Json 何打开 代理 对象      更新时间:2023-09-26

我想将一些对象序列化到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();

这听起来真的很像这个家伙的问题:http://markmail.org/message/x5a2k7j7qtjmj73g#query:+页码:1+mid:4r5lcggmfrcq5tby+状态:结果

因此,我的计划是使用Json.net而不是JavaScriptSerializer,并在该页面上实现解决方案,但它看起来非常复杂。任何其他建议都很好。

也许你可以在序列化对象之前"取消代理"。本文展示了如何做到这一点-识别NHibernate代理类

IMHO,正确答案是"你没有"
您的实体(可能包含代理)属于您的业务域。您应该序列化DTO,它只包含客户端需要的内容,而不包含更多内容
阿恩德写得很详细。

附言:在映射中设置延迟加载参数也被认为是最佳实践而不是,而是根据正在执行的特定查询来决定是否延迟加载。阿恩德再次解释道。