Json.NETには、その魔法を実行できる設定があります...それはPreserving Object Referencesであり、ドキュメントへのリンクは次のとおりです。
あなたが経験していることは、ドキュメントの例に似ていると思います
いくつかの抜粋 (ただし、詳細についてはドキュメントを参照してください) :
2人でコレクションしましょう。ちょっとしたトリックで:PreserveReferencesHandling
このように設定
string json = JsonConvert.SerializeObject(
people,
Formatting.Indented,
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
});
次のような結果を得ることができます。
[
{
"$id": "1",
"Name": "James",
"BirthDate": "1983-03-08T00:00Z",
"LastModified": "2012-03-21T05:40Z"
},
{
"$ref": "1"
}
]
私たちが見ることができるものは、おそらくあなたが経験するものです。あなたPreserveReferencesHandling.Objects
のコードの設定のようです。したがって、次のように明示的にNoneに設定してみてください。
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.None;
}
ドキュメントのように:
... デフォルトでは、Json.NET は遭遇するすべてのオブジェクトを値でシリアル化します。リストに 2 つの Person 参照が含まれていて、両方の参照が同じオブジェクトを指している場合、JsonSerializer は各参照のすべての名前と値を書き出します...
したがって、これは再びデフォルト設定にする必要があります
別の興味深い読み物:
Serializing Circular References