如何将de-proxy对象转换为可以将它们序列化为Json?

时间:2012-03-16 17:33:30

标签: javascript json nhibernate serialization lazy-loading

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

我的代码使用NHibernate和JavaScriptSerializer:

public static string Convert(object xiObject)
{
  var lSerialiser = new JavaScriptSerializer();

  return lSerialiser.Serialize(xiObject);
}

Lazy Loading应该关闭,如:

  HasManyToMany(x => x.Managers)
    .Not.LazyLoad();

这听起来与这个家伙的问题非常相似: http://markmail.org/message/x5a2k7j7qtjmj73g#query:+page:1+mid:4r5lcggmfrcq5tby+state:results

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

2 个答案:

答案 0 :(得分:0)

在序列化之前,您可以“取消对象”对象。本文介绍了如何执行此操作 - Identifying NHibernate proxy classes

答案 1 :(得分:0)

恕我直言,正确答案是“你没有” 您的实体(可能包含代理)属于业务域。您应该序列化DTO,它只包含客户需要的内容,而不是更多内容 艾恩德writes about it in detail

P.S。在映射中设置lazy-load参数也是最佳做法 not ,而是根据您正在执行的特定查询来决定是否延迟加载。再次,艾恩德explains