ASP.NET MVC アプリケーションを Newtonsoft JsonSerializer を使用して JSON シリアル化を行うように切り替えました。
var writer = new JsonTextWriter(HttpContext.Response.Output) { Formatting = Formatting };
var serializer = JsonSerializer.Create();
serializer.Serialize(writer, myData);
これにより、 $id および $ref プロパティを持つ JSON が生成され、重複するオブジェクトが JSON から削除されます。これが優れた機能であることはわかっていますが、この JSON を読み取るクライアントは、これらの参照の解釈をサポートできず、完全なオブジェクトが存在することを期待できません。PreserveReferencesHandling
プロパティをすべての可能な値に設定しようとしましJsonSerializerSettings
たが、違いはないようです。
$id および $ref プロパティの作成を無効にして、Newtonsoft シリアライザーにオブジェクト グラフ全体を書き出すにはどうすればよいですか?
EDIT : これはサンプル C# クラス、私が期待する JSON、および Newtonsoft シリアライザーによって作成された JSON です。
public class Product
{
public Image MainImage { get; set; }
public List<Image> AllImages { get; set; }
}
public class Image
{
public int Id { get; set; }
public string Url { get; set; }
}
私が期待するJSON:
{
MainImage: { Id: 1, Url: 'http://contoso.com/product.png' },
AllImages: [{ Id: 1, Url: 'http://contoso.com/product.png' },{ Id: 2, Url: 'http://contoso.com/product2.png' }]
}
Newtonsoft シリアライザーによって作成された JSON (MainImage に追加された $id パラメーターと、参照されるオブジェクトが完全に $ref パラメーターに置き換えられていることに注意してください):
{
MainImage: { $id: 1, Id: 1, Url: 'http://contoso.com/product.png' },
AllImages: [{ $ref: 1 },{ Id: 2, Url: 'http://contoso.com/product2.png' }]
}
Newtonsoft バージョンの方が優れている (DRYer である) ことは理解していますが、この JSON 出力を読み取るクライアントは $ref の意味を理解していません。