Welcher Json-Deserializer rendert IList <T> -Sammlungen?

Ich versuche, json in ein Objektmodell zu deserialisieren, in dem die Sammlungen als dargestellt werdenIList<T> Typen.

Die eigentliche Deserialisierung ist hier:

JavaScriptSerializer serializer = new JavaScriptSerializer();

return serializer.Deserialize<IList<Contact>>(
    (new StreamReader(General.GetEmbeddedFile("Contacts.json")).ReadToEnd()));

Bevor ich die Ausnahme poste, die ich erhalte, sollten Sie wissen, was die impliziten Umwandlungen sind. Dies ist dasContact Art:

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; }
}

Und das ist dasContactDetail Art:

public class ContactDetail
{
    public int ID { get; set; }
    public int OrderIndex { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
}

Das Wichtigste mit dem zu wissenLazyList<T> ist, dass es implementiertIList<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;
    }

Jetzt dasLazyList<T> Die Klassendefinition war in Ordnung, bis ich versuchte, Json darin zu deserialisieren. DasSystem.Web.Script.Serialization.JavaScriptSerializer scheint Listen serialisieren zu wollenList<T> Das macht Sinn, weil es alt ist, aber ich brauche sie in der ArtIList<T> so werden sie in meine werfenLazyList<T> (Zumindest denke ich, dass ich hier falsch liege).

Ich bekomme diese Ausnahme:

System.ArgumentException: Object of type 'System.Collections.Generic.List`1[ContactDetail]' cannot be converted to type 'LazyList`1[ContactDetail]'..

Wenn ich es versucheList<ContactDetail> in meinemContact Typ (wie Sie oben sehen können kommentiert) scheint es zu funktionieren. Aber ich möchte nicht verwendenList<T>'s. Ich habe sogar versucht, meine zu habenLazyList<T> erben vonList<T> die schien auszuführen, aber vorbei an derList<T>ist internT[] Für mich war die Umsetzung ein Albtraum und ich möchte einfach nicht aufblähenList<T> irgendwo in meinem Modell.

Ich habe auch einige ausprobiertandere json Bibliotheken ohne Erfolg (es ist möglich, dass ich diese nicht voll ausschöpfen kann. Ich habe die Referenzen mehr oder weniger ersetzt und versucht, den oben in dieser Frage zitierten Code zu wiederholen. Vielleicht hilft es, Parameter für Einstellungen zu übergeben?).

Ich weiß nicht, was ich jetzt versuchen soll. Gehe ich mit einem anderen deserializer Optimiere ich die Deserialisierung selbst? Muss ich meine Typen ändern, um den Deserialisierer zufrieden zu stellen? Muss ich mich mehr um implizites Casting kümmern oder nur eine andere Schnittstelle implementieren?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage