Maison > développement back-end > C++ > Comment sérialiser des classes dérivées dans des listes génériques à l'aide de XmlSerializer ?

Comment sérialiser des classes dérivées dans des listes génériques à l'aide de XmlSerializer ?

Patricia Arquette
Libérer: 2025-01-11 10:42:45
original
533 Les gens l'ont consulté

How to Serialize Derived Classes within Generic Lists using XmlSerializer?

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

Lors de l'utilisation de XmlSerializer pour sérialiser un objet contenant une liste générique de classes dérivées de classes abstraites, les utilisateurs peuvent rencontrer une exception InvalidOperationException pendant le processus de désérialisation. La résolution de ce problème nécessite des techniques spécifiques pour gérer la sérialisation des objets dérivés.

Solution

Il existe trois méthodes efficaces :

  1. [XmlInclude] Attributs : Applique l'attribut [XmlInclude] avant la déclaration de classe abstraite, y compris chaque type de classe dérivé. Cela garantit que le sérialiseur sait comment gérer ces types dérivés spécifiques.
  2. XmlElement/XmlArrayItem Attributs : Utilisez l'attribut [XmlElement] ou [XmlArrayItem] sur un attribut contenant une liste. Spécifiez le type de classe dérivée dans ces propriétés pour demander au sérialiseur de reconnaître et de désérialiser l'objet.
  3. Combinaison de deux méthodes : Combinez ces deux méthodes en utilisant [XmlInclude] sur les classes abstraites et [XmlElement] ou [XmlArrayItem] sur les propriétés, fournissant ainsi une gestion de type explicite et implicite.

Les extraits de code suivants fournissent des exemples de mise en œuvre détaillés utilisant chaque méthode :

<code class="language-csharp">// 1: [XmlInclude(typeof(ChildA))]
// 1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}

// 2: [XmlElement("A", Type = typeof(ChildA))]
// 2: [XmlElement("B", Type = typeof(ChildB))]
// 3: [XmlArrayItem("A", Type = typeof(ChildA))]
// 3: [XmlArrayItem("B", Type = typeof(ChildB))]
public List<ChildClass> Data { get; set; }

// ... 序列化和反序列化代码在此处 ...</code>
Copier après la connexion

Sélectionnez la méthode préférée et décommentez l'extrait de code correspondant pour la sérialisation 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
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