2012-03-16 20 views
0

いくつかのオブジェクトをJsonにシリアル化したいと思っています。時には(必ずしもそうではなく、私が何をトリガするのかわからない)これらのオブジェクトの1つはプロキシです。循環参照がなくてもシリアライザが循環参照エラーをスローする原因になります。タイプ 'System.Reflection.RuntimeModule'のオブジェクトです。 "de-proxyオブジェクトをJsonにシリアル化できるようにするには、どうすればよいですか?

私のコードは、NHibernateのとJavaScriptSerializerを使用しています。それは、この男の問題には本当に似て聞こえる

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

::のように

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

    return lSerialiser.Serialize(xiObject); 
} 

レイジーロードは、オフのはずです http://markmail.org/message/x5a2k7j7qtjmj73g#query:+page:1+mid:4r5lcggmfrcq5tby+state:results

ので、 JavaScriptSerializerの代わりにJson.netを使用し、そのページにソリューションを実装することですlicated。他の提案はすばらしいでしょう。

答えて

0

おそらく、オブジェクトを直列化する前に、オブジェクトの「プロキシ解除」を行うことができます。この記事では、それを行う方法を示します。 - Identifying NHibernate proxy classes

+0

ありがとうございます - このリンクはそれを行いました:http://sessionfactory.blogspot.co.uk/2010/08/hacking-lazy-loaded-inheritance.html – JYX

0

IMHO、正解は「あなたはありません」です。
エンティティ(プロキシを含む可能性があります)は、ビジネスドメインに属しています。クライアントが必要とするものだけを含むDTOをシリアライズする必要があります。
Ayende writes about it in detail

P.S. マッピングにlazy-loadパラメータを設定する代わりに、実行中の特定のクエリに基づいてレイジーロードするかどうかを決定することもベストプラクティスと見なされます。再び、Ayende explains

関連する問題