我刚刚开始使用 Newtonsoft.Json (Json.net)。在我的第一个简单测试中,我在反序列化通用列表时遇到了问题。在下面的代码示例中,我序列化了一个对象,其中包含三种类型的简单整数列表(属性、成员 var 和数组)。
生成的 json 看起来不错(列表被转换为 json 数组)。但是,当我将 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 重复私有列表项有一些重叠。但是,我认为我的问题更简单,我仍然没有弄清楚。