Какой десериализатор 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 библиотеки безрезультатно (возможно, я не использую их в полной мере. Я более или менее заменил ссылки и попытался повторить код, приведенный в начале этого вопроса. Может быть, передача параметров настройки поможет ??).

Я не знаю, что попробовать сейчас. Я иду с другим десериализатором? Я настраиваю десериализацию себя? Нужно ли менять свои типы, чтобы понравиться десериализатору? Нужно ли больше беспокоиться о неявном приведении или просто реализовать другой интерфейс?

Ответы на вопрос(3)

Ваш ответ на вопрос