Newtonsoft.Json(Json.net)を使い始めたところです。最初の簡単なテストで、汎用リストを逆シリアル化するときに問題が発生しました。以下のコードサンプルでは、3種類の単純な整数リスト(プロパティ、メンバー変数、配列)を含むオブジェクトをシリアル化します。
結果のjsonは正常に見えます(リストはjson-arraysに変換されます)。ただし、jsonを逆シリアル化して同じタイプの新しいオブジェクトに戻すと、すべてのリストアイテムが複製され、配列が必要になります。もう一度シリアル化することでそれを説明しました。
周りを検索して、デシリアライザーも入力するリストに「プライベート」バッキングフィールドがある可能性があることを読みました。
だから私の質問は:次の場合に重複アイテムを避けるための(できれば簡単な)方法はありますか?
コード
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace JsonSerializeExample
{
public class Program
{
static void Main()
{
var data = new SomeData();
var json = JsonConvert.SerializeObject(data);
Console.WriteLine("First : {0}", json);
var data2 = JsonConvert.DeserializeObject<SomeData>(json);
var json2 = JsonConvert.SerializeObject(data2);
Console.WriteLine("Second: {0}", json2);
}
}
public class SomeData
{
public string SimpleField;
public int[] IntArray;
public IList<int> IntListProperty { get; set; }
public IList<int> IntListMember;
public SomeData()
{
SimpleField = "Some data";
IntArray = new[] { 7, 8, 9 };
IntListProperty = new List<int> { 1, 2, 3 };
IntListMember = new List<int> { 4, 5, 6 };
}
}
}
結果の出力
First : {"SimpleField":"Some data","IntArray":[7,8,9],"IntListMember":[4,5,6],"IntListProperty":[1,2,3]}
Second: {"SimpleField":"Some data","IntArray":[7,8,9],"IntListMember":[4,5,6,4,5,6],"IntListProperty":[1,2,3,1,2,3]}
ここでは、Json.Netの重複するプライベートリストアイテムと重複している可能性があります。しかし、私の問題はもっと単純だと思います、そして私はまだそれを理解していません。