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
Libérer: 2025-01-11 09:53:43
original
182 Les gens l'ont consulté

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

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!

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