2016-04-26 34 views
3

このプロジェクトでは、各リポジトリメソッドごとに新しいDbContextを作成することがありました(すべての要求に任意の数のdbcontextが作成されました)各ウェブリクエストでReferenceLoopHandling.Ignoreに設定すると、json.netは循環参照を無視しません。

私はリクエストごとに1つのコンテキストしか持たないが、シリアライズのいくつかはうんざりしてメモリ不足の例外が発生するということを解決しました。シリアル化されたデータを見ると、Json.Netは円参照処理の列挙値ReferenceLoopHandling.Ignoreを完全に無視しています。私がReferenceLoopHandling.Errorに設定すると、自己参照オブジェクトですぐに例外が発生することに注意してください。

これは、プロキシと遅延ロードの両方が有効で無効になっている場合に発生します。

JsonSerializerのために使用される設定の全リスト:既存のオブジェクトへの参照は、参照の代わりに、再シリアライズオブジェクトを使用して実行されるように

DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Local, Formatting = Formatting.None, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include

+1

問題を示す[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を含めるように質問を編集できますか?これにより、誰かがあなたを助けるのがずっと楽になります。 –

答えて

3

は、PreserveReferencesHandling.ObjectsSerializerSettings.PreserveReferencesHandlingを設定してみてください。

+0

私はこれが古いことを知っていますが、これは今でも私に影響しています。この提案はエラーの発生を止めますが、JSONをまったく別の方法で読む必要があります。なぜオブジェクトは、それが何をすると言っていることをやっていないのですか? – ewahner

関連する問題