Sérialiser et désérialiser les types dérivés à l'aide de Json.net
Json.net (Newtonsoft) nécessite une gestion spéciale pour sérialiser et désérialiser correctement les types dérivés lors de l'utilisation de l'héritage polymorphe en C#. Cet article explique comment procéder en activant la gestion des noms de types.
Question
Considérez la hiérarchie de classes suivante :
<code class="language-csharp">public class Base { public string Name; } public class Derived : Base { public string Something; }</code>
Désormais, si vous essayez de désérialiser une chaîne JSON contenant une liste d'objets de base, mais qu'elle contient en fait des objets dérivés, vous ne pourrez pas récupérer les informations de type dérivé. Comment résoudre ce problème ?
Réponse
Json.net fournit l'option TypeNameHandling, qui permet la sérialisation et la désérialisation des noms de types. Pour utiliser cette fonctionnalité :
Voici un exemple :
<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>
Cette approche garantit que Json.net préserve les informations de type pendant la sérialisation et les restaure pendant la désérialisation, permettant ainsi la restauration correcte des types dérivés.
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!