2013-05-24 1 views
5

MVC 4.5のMVC/Web APIを使用してJSONサービスを提供しています。以前の要素を参照することから.net JSONシリアライズを停止するにはどうすればよいですか?

すべては、一定量の繰り返しデータを持つ大きなJSON結果を公開する必要があるまでうまく機能します。

例えば、私は書籍のリストを持っていますが、それぞれが完全な著者データを持っている場合、.netは同じ著者の第2版を以前のものを参照するように変更しますデータを複製する。このような場合は、$ X参照を使用します.Xは参照するアイテムのインデックスです。

私はそのに効率の節約に感謝一方で、このフォーマットは、当社のクライアントアプリケーションによって消費することはできませんJson.NETはその魔法を行うことができます設定があり

答えて

3

...それは、保存オブジェクト参照でとここにありますdocumentationへのリンクは:

は、私はあなたが経験しているものを、doucmentationでexmpleに類似していること、言う

いくつかの抽出物が(しかし、目を参照してください。 eドキュメント)

2人でコレクションpoepleを持ってみましょう。小さなトリックで: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あなたのコードの設定のようです。デフォルトJson.NETではそれが 値によって発生したすべてのオブジェクトをシリアライズします...

new JsonSerializerSettings 
{ 
    PreserveReferencesHandling = PreserveReferencesHandling.None; 
} 

とドキュメントのように:だから、明示的にこのようななしに設定してみてください。リストには、2つの参照が含まれており、同じオブジェクトへの参照の両方 ポイントなら、JsonSerializerだから、これはデフォルト設定する必要があります

...各参照のためのすべての 名前と値を書き出します再び

もう一つの興味深い読書:循環参照について Serializing Circular References

+0

1ニースの記事。 –

関連する問題