Maison >développement back-end >C++ >Comment Json.net peut-il gérer la sérialisation et la désérialisation des types dérivés ?

Comment Json.net peut-il gérer la sérialisation et la désérialisation des types dérivés ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-21 18:28:10892parcourir

How Can Json.net Handle Serializing and Deserializing Derived Types?

Sérialisation et désérialisation des types dérivés dans Json.NET (Newtonsoft)

Json.NET offre une flexibilité dans la sérialisation et la désérialisation de structures de données complexes. Lorsqu'il s'agit de types dérivés, il est crucial de conserver les informations de type pendant la sérialisation afin qu'elles soient correctement désérialisées.

Json.NET implémente cette fonctionnalité via l'attribut JsonSerializerSettings de l'objet TypeNameHandling. En définissant cette propriété sur All, Json.NET inclura le nom du type dans la sortie sérialisée.

Par exemple, considérons les classes de base et dérivées suivantes :

<code class="language-csharp">public class Base
{
    public string Name;
}

public class Derived : Base
{
    public string Something;
}</code>

Pour sérialiser et désérialiser les types dérivés :

<code class="language-csharp">// 序列化
var object1 = new Base() { Name = "Object1" };
var object2 = new Derived() { Something = "Some other thing" };
var inheritanceList = new List<Base>() { object1, object2 };

JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
string serialized = JsonConvert.SerializeObject(inheritanceList, settings);

// 反序列化
var deserializedList = JsonConvert.DeserializeObject<List<Base>>(serialized, settings);</code>

Avec cette approche, Json.NET préserve les informations de type, permettant ainsi la désérialisation réussie des types dérivés. Cependant, il est important de noter que la sortie sérialisée contiendra les types associés aux objets et toutes les listes utilisées pour les contenir.

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!

Déclaration:
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