JsonResult
MVCコントローラーの標準Json(object)
メソッドを使用して返そうとしています。私のタイプのオブジェクトはModel1
Fluent NHibernate によって構築されています。
Model1
は type のプロパティを持っていますModel2
。デバッグ モードでは、環境がModel2
呼び出されたプロキシの子孫クラスを作成することがわかりますCastle.Proxies.Model2Proxy
。これは、私のマッピングを満たすために、Fluent Nhibernate によって内部的に使用されていると思います。そして実行時に、実際の model1.Model2 は typeCastle.Proxies.Model2Proxy
です。
問題は、 myModel1
がシリアライズされているときに、 もシリアライズModel2
されていることです。そして、シリアライザーは、Castle によって生成され、私には必要のないものを含め、このオブジェクトのすべてのプロパティをシリアル化しようとしているようです。例外が発生しなければ問題ありません。つまり、このオブジェクト内のどこかに循環参照が存在し、それが原因で例外が発生します。例外テキストは次のとおりです。
System.InvalidOperationException: A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'
ドメインを再確認したところ、そこに循環参照が見つからなかったので、Castle のせいです。私は正しいですか?キャッスルは本当にその責任を負っていますか?もしそうなら、私の選択肢は何ですか?Castle プロパティを無視するようにシリアライザに指示するにはどうすればよいですか? 特に、実際の型ではなく、定義された型をシリアル化するように指示するにはどうすればよいですか?
この問題に対処するために、ドメイン モデルを ViewModel でカバーする傾向がありますが、これは推奨されるアプローチですが、別の治療法が存在する場合はぜひ知りたいと思っています。