У меня есть класс коллекции, который реализует IEnumerable, и у меня возникает проблема десериализации сериализованной версии. Я использую Json.net v 4.0.2.13623
Вот более простая версия моего класса коллекции, которая иллюстрирует мою проблему
public class MyType
{
public int Number { get; private set; }
public MyType(int number)
{
this.Number = number;
}
}
public class MyTypes : IEnumerable<MyType>
{
private readonly Dictionary<int, MyType> c_index;
public MyTypes(IEnumerable<MyType> seed)
{
this.c_index = seed.ToDictionary(item => item.Number);
}
public IEnumerator<MyType> GetEnumerator()
{
return this.c_index.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public int CustomMethod()
{
return 1; // Just for illustration
}
}
Когда я сериализую его, я получаю следующий json
[
{
"Number": 1
},
{
"Number": 2
}
]
Но тогда, когда я пытаюсь десериализовать, я получаю следующее исключение System.Exception: невозможно создать и заполнить тип списка MyTypes
Также попробовали использовать подсказки сериализации, но не имели успеха
Это тестовая функция, которую я использовал
public void RoundTrip()
{
var _myTypes1 = new MyTypes(new[] { new MyType(1), new MyType(2) });
var _jsonContent = JsonConvert.SerializeObject(_myTypes1, Formatting.Indented);
var _myTypes2 = JsonConvert.DeserializeObject<MyTypes>(_jsonContent);
}
public void RoundTripWithSettings()
{
var _myTypes1 = new MyTypes(new[] { new MyType(1), new MyType(2) });
var _serializationSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Arrays };
var _jsonContent = JsonConvert.SerializeObject(_myTypes1, Formatting.Indented, _serializationSettings);
var _myTypes2 = JsonConvert.DeserializeObject<MyTypes>(_jsonContent, _serializationSettings);
}
Кто-нибудь смог сериализовать свои собственные объекты коллекции?
Заранее спасибо
Пат