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