Maison >développement back-end >C++ >Comment puis-je sérialiser des classes dérivées à l'aide de XmlSerializer ?

Comment puis-je sérialiser des classes dérivées à l'aide de XmlSerializer ?

DDD
DDDoriginal
2025-01-11 09:53:43134parcourir

How Can I Serialize Derived Classes Using XmlSerializer?

Utilisez XmlSerializer pour sérialiser les classes dérivées

Les développeurs peuvent rencontrer une InvalidOperationException s'ils utilisent XmlSerializer lorsqu'ils tentent de sérialiser un objet qui contient une classe abstraite dans le cadre de ses propriétés. Surmonter cet obstacle nécessite une gestion efficace des classes dérivées lors de la sérialisation.

Solution

XmlSerializer propose trois méthodes pour résoudre ce problème :

  1. [XmlInclude] Attribut : Appliqué à la classe de base, il indique que le sérialiseur contient des classes dérivées.

    <code class="language-csharp"> [XmlInclude(typeof(ChildA))]
     [XmlInclude(typeof(ChildB))]
     public abstract class ChildClass
     {
         public string ChildProp { get; set; }
     }</code>
  2. XmlElement/XmlArrayItem Attributs : Ces attributs doivent être appliqués aux propriétés portant des listes, spécifiant le type de chaque élément de classe dérivé.

    <code class="language-csharp"> [XmlElement("A", Type = typeof(ChildA))]
     [XmlElement("B", Type = typeof(ChildB))]
     public List<ChildClass> Data { get; set; }</code>
  3. XmlArrayItem Attributs : Placés sur la liste elle-même, ils définissent les types d'éléments que la liste peut contenir.

    <code class="language-csharp"> [XmlArrayItem("A", Type = typeof(ChildA))]
     [XmlArrayItem("B", Type = typeof(ChildB))]
     public List<ChildClass> Data { get; set; }</code>

En sélectionnant l'une de ces options et en décommentant le bloc de code correspondant dans l'exemple de code fourni, les développeurs peuvent réussir à sérialiser et désérialiser les objets contenant des classes dérivées.

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