JSON.NET: Comment faire pour désérialiser interface bien sur la base d'un parent (titulaire) la valeur de l'objet?

J'ai ces classes

class Holder {
    public int ObjType { get; set; }
    public List<Base> Objects { get; set; }
}

abstract class Base {
    //... doesn't matter
}

class DerivedType1 : Base {
    //... doesn't matter
}

class DerivedType2 : Base {
    //... doesn't matter
}

À l'aide de WebAPI je veux recevoir l'objet Holder et désérialiser correctement. Basé sur le ObjType valeur que j'ai besoin Objects bien être désérialisé soit comme List<DerivedType1> (ObjType == 1) ou List<DerivedType2> (ObjType == 2).

Pour le moment j'ai cherché SI et internet pour la meilleure approche, mais la meilleure que j'ai trouvé est cette réponse https://stackoverflow.com/a/8031283/1038496. Le problème de cette solution est qu'elle lâche contexte de l'objet parent, je ne peux pas trouver la valeur de ObjType. OK, j'ai pu le résoudre en créant personnalisé JsonConverter pour Holder et remebering la ObjType valeur, mais je suis peur de cette ligne

serializer.Populate(jObject.CreateReader(), target);

que le commentaire en dessous de cette réponse dit

La nouvelle JsonReader créé dans le ReadJson méthode n'héritent pas l'un de l'original du lecteur valeurs de configuration (Culture, DateParseHandling, DateTimeZoneHandling, FloatParseHandling, etc...). Ces valeurs doivent être copiés avant d'utiliser le nouveau JsonReader dans sérialiseur.Remplir().

qui est un problème pour moi et de copier ces valeurs par moi-même ne semble pas propre à moi (si j'ai raté quelque chose?)

La question est donc: Est-il une meilleure approche que j'ai manqué de désérialiser objet abstrait de la propriété fondée sur la propriété parent de la valeur?

InformationsquelleAutor Zoka | 2014-03-20