Maison > développement back-end > C++ > Comment puis-je désérialiser une liste de types de base et dérivés à l'aide de Json.net et conserver leurs types réels ?

Comment puis-je désérialiser une liste de types de base et dérivés à l'aide de Json.net et conserver leurs types réels ?

DDD
Libérer: 2025-01-21 18:35:09
original
862 Les gens l'ont consulté

How Can I Deserialize a List of Base and Derived Types Using Json.net and Preserve Their Actual Types?

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>
Copier après la connexion
Une fois

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal