Я только что начал использовать Newtonsoft.Json(Json.net). В моем первом простом испытании я столкнулся с проблемой при десериализации общих списков. В моем примере кода ниже я сериализую объект, содержащий три типа простых целых списков (свойство, член var и массив).
Получившийся json выглядит отлично (списки преобразуются в json-массивы). Однако, когда я десериализую json обратно на новый объект того же типа, все элементы списка дублируются, ожидайте для массива. Я проиллюстрировал это, сериализуя его во второй раз.
От поиска, я прочитал, что может быть поле поддержки "private" для списков, которые также заполняет десериализатор.
Итак, мой вопрос: есть ли (желательно простой) способ избежать дублирования элементов в следующем случае?
Код
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 дублирует личный список элементов. Тем не менее, я думаю, что моя проблема еще проще, и я до сих пор не понял этого.