タイプ 'SubSonic.Schema .DatabaseColumn'のオブジェクトをシリアル化している間に循環参照が検出されました。

.net c# entity-framework json subsonic

質問

私は簡単なJSONの返品をやろうとしていますが、以下の問題があります。

public JsonResult GetEventData()
{
    var data = Event.Find(x => x.ID != 0);
    return Json(data);
}

この質問のタイトルに示されているように、例外を除いてHTTP 500を受け取ります。私も試した

var data = Event.All().ToList()

それは同じ問題を与えた。

これはバグですか、それとも私の実装ですか?

受け入れられた回答

オブジェクト階層に循環参照があり、JSONシリアライザではサポートされていないようです。すべての列が必要ですか。ビューに必要なプロパティだけを選択できます。

return Json(new 
{  
    PropertyINeed1 = data.PropertyINeed1,
    PropertyINeed2 = data.PropertyINeed2
});

これにより、JSONオブジェクトはより軽量になり、理解しやすくなります。多くのプロパティがある場合は、 AutoMapperを使用してDTOオブジェクトとViewオブジェクト間を自動的にマッピングできます。


エキスパート回答

JSONは、xmlやその他のさまざまな形式と同様に、ツリーベースのシリアル化形式です。あなたのオブジェクトに循環参照があるなら、それはあなたを愛しません、「木」がそうなるでしょう:

root B => child A => parent B => child A => parent B => ...

特定の経路に沿ってナビゲーションを無効にする方法はよくあります。たとえば、 XmlSerializerを使用すると、parentプロパティをXmlIgnoreとしてマークできます。問題のjsonシリアライザでこれが可能かどうか、またDatabaseColumnに適切なマーカーがあるかどうかはわかりません(すべてのシリアル化APIを参照する必要があるため、 非常にまれです)



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ