質問: エンティティフレームワークオブジェクトをJavaScript Object(JSON)にシリアル化する方法を教えてください。 JSON.NETを使用しようとしましたが、シリアライズしようとすると次の例外が発生します。 例外:Newtonsoft.Json.JsonSerializationException、メッセージ= "自己参照ループ" ハイテッシュ
回答: 循環参照に関しては、元のDataContractシリアライザと同じ一般的な問題があるようです。オブジェクトを互いに参照することはメモリ内のオブジェクトグラフではかなり一般的ですが、シリアライザが特に考慮しない場合、このような循環参照は、シリアライズ時に必然的に無限の再帰をもたらします。一般的な非バイナリシリアル化形式の循環参照を処理するための確立された標準は、あるとしてもほとんどありません(XMLとJSONが2つの最も普及している)。 Microsoftは、xmlのrefセマンティクスを利用することによって、.NET 3.5 SP1のDataContractシリアライザの周期的な問題を解決しました。私の知る限りでは、JSONにはそのようなことはないため、JSON.NETがオブジェクトグラフのシリアル化を妨げているのかもしれません。 両方向ではなく、一方向にナビゲートできるオブジェクトグラフ内の参照のみがあることを確認します(つまり、親から子へのみ、子から親へではありません)。循環参照のタイプまた、低レベルの子が最終的にグラフのルートを参照しているため、間接循環グラフが作成される可能性があります(ただし、これらは親子ループよりもはるかに一般的ではありません)。 オブジェクトグラフの循環参照を削除したら、シリアル化できるはずです。