Какой десериализатор Json отображает коллекции IList <T>?
Я пытаюсь десериализовать JSON в объектную модель, где коллекции представлены в видеIList<T>
типы.
Фактическая десериализация здесь:
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize<IList<Contact>>(
(new StreamReader(General.GetEmbeddedFile("Contacts.json")).ReadToEnd()));
Прежде чем я отправлю исключение, я получаю, вы должны знать, что такое неявные преобразования. ЭтоContact
тип:
public class Contact
{
public int ID { get; set; }
public string Name { get; set; }
public LazyList<ContactDetail> Details { get; set; }
//public List<ContactDetail> Details { get; set; }
}
И этоContactDetail
тип:
public class ContactDetail
{
public int ID { get; set; }
public int OrderIndex { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
Важная вещь, чтобы знать сLazyList<T>
это то, что он реализуетIList<T>
:
public class LazyList<T> : IList<T>
{
private IQueryable<T> _query = null;
private IList<T> _inner = null;
private int? _iqueryableCountCache = null;
public LazyList()
{
this._inner = new List<T>();
}
public LazyList(IList<T> inner)
{
this._inner = inner;
}
public LazyList(IQueryable<T> query)
{
if (query == null)
throw new ArgumentNullException();
this._query = query;
}
Теперь этоLazyList<T>
Определение класса было в порядке, пока я не попытался десериализовать Json.System.Web.Script.Serialization.JavaScriptSerializer
кажется, хочет сериализовать спискиList<T>
что имеет смысл, потому что его возраст, но мне нужны они в типеIList<T>
поэтому они будут брошены в мойLazyList<T>
(по крайней мере, там я думаю, что я иду не так).
Я получаю это исключение:
System.ArgumentException: Object of type 'System.Collections.Generic.List`1[ContactDetail]' cannot be converted to type 'LazyList`1[ContactDetail]'..
Когда я пытаюсь использоватьList<ContactDetail>
в моемContact
Тип (как вы можете видеть в комментариях выше), кажется, работает. Но я не хочу использоватьList<T>
«S. Я даже пытался иметь мойLazyList<T>
наследование отList<T>
который казался казненным, но передаваяList<T>
внутреннийT[]
чтобы моя реализация была кошмаром, и я просто не хочу раздуватьList<T>
где-нибудь в моей модели.
Я также попробовал некоторыедругой JSON библиотеки безрезультатно (возможно, я не использую их в полной мере. Я более или менее заменил ссылки и попытался повторить код, приведенный в начале этого вопроса. Может быть, передача параметров настройки поможет ??).
Я не знаю, что попробовать сейчас. Я иду с другим десериализатором? Я настраиваю десериализацию себя? Нужно ли менять свои типы, чтобы понравиться десериализатору? Нужно ли больше беспокоиться о неявном приведении или просто реализовать другой интерфейс?