Maison > développement back-end > C++ > Comment puis-je désérialiser les types dérivés dans JSON.NET tout en préservant les informations de type ?

Comment puis-je désérialiser les types dérivés dans JSON.NET tout en préservant les informations de type ?

Mary-Kate Olsen
Libérer: 2025-01-21 18:46:14
original
678 Les gens l'ont consulté

How Can I Deserialize Derived Types in JSON.NET While Preserving Type Information?

Désérialisation de type dérivé Json.net

Lors du traitement des données JSON, il peut être avantageux de sérialiser et de désérialiser les objets qui suivent une relation de classe dérivée de base. Cependant, Json.net (Newtonsoft) nécessite une configuration spécifique pour gérer efficacement les types dérivés.

Question :

Considérez les classes de base et dérivées suivantes :

<code>public class Base
{
    public string Name;
}
public class Derived : Base
{
    public string Something;
}</code>
Copier après la connexion

Si vous essayez de désérialiser une chaîne JSON contenant des objets de classe de base et dérivés vers List<Base>, vous n'obtiendrez que l'objet de classe de base, perdant ainsi les informations de type dérivé.

Solution :

Pour réussir à désérialiser les types dérivés, vous devez activer la gestion des noms de types. Ceci peut être réalisé en créant un objet JsonSerializerSettings et en définissant la propriété TypeNameHandling sur All. Transmettez cet objet de paramètres aux opérations de sérialisation et de désérialisation :

<code>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

En activant la gestion des noms de types, Json.net inclura les informations de type dans la chaîne JSON. Lors de la désérialisation, il utilisera ces informations pour recréer correctement l'objet dérivé et remplir deserializedList.

Remarque : L'utilisation de cette méthode expose les noms de tous les objets ainsi que la liste elle-même dans les données sérialisées. Si cela pose un problème, envisagez d’autres moyens de gérer les relations polymorphes.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal