Désérialiser les types dérivés à l'aide de Json.net
Supposons que vous ayez une classe de base Base
et une classe dérivée Derived
, où Derived
hérite de Base
. Vous disposez d'une liste d'objets Base
, qui contient des instances de Base
et Derived
. Lorsque vous désérialisez la représentation JSON de cette liste, vous souhaitez récupérer le type dérivé comme son type réel, pas seulement comme un objet Base
.
Pour y parvenir, Json.net propose une fonctionnalité appelée Gestion des noms de types. En activant cette fonctionnalité et en la transmettant comme paramètre de paramètres aux opérations de sérialisation et de désérialisation, vous pouvez spécifier le type d'objet qui doit être inclus dans le JSON sérialisé.
<code class="language-csharp">Base object1 = new Base() { Name = "Object1" }; Derived object2 = new Derived() { Something = "Some other thing" }; List<Base> inheritanceList = new List<Base>() { object1, object2 }; JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string Serialized = JsonConvert.SerializeObject(inheritanceList, settings); List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);</code>
désérialisé, deserializedList
contiendra Base
et Derived
objets du type correct. Cependant, l'activation de la gestion des noms de types présente un inconvénient : elle inclura les noms de tous les objets et listes dans le JSON sérialisé, ce qui peut ne pas être idéal dans certains cas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!