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

Comment sérialiser des classes dérivées dans des listes génériques avec XmlSerializer ?

Mary-Kate Olsen
Libérer: 2025-01-11 09:27:43
original
524 Les gens l'ont consulté

How to Serialize Derived Classes in Generic Lists with XmlSerializer?

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

Lorsque vous utilisez XmlSerializer pour la sérialisation XML, vous pouvez rencontrer des difficultés lors de la gestion d'objets contenant des listes génériques dérivées de classes abstraites. Les tentatives de désérialisation de tels objets peuvent entraîner une InvalidOperationException.

Pour résoudre ce problème, vous pouvez utiliser l'une des trois méthodes suivantes :

1. Utilisez l'attribut [XmlInclude] sur le type de base :

<code class="language-csharp">using System.Xml.Serialization;

[XmlInclude(typeof(ChildA))]
[XmlInclude(typeof(ChildB))]
public abstract class ChildClass
{
    public string ChildProp { get; set; }
}</code>
Copier après la connexion

2. Utilisez l'attribut [XmlElement] sur l'attribut :

<code class="language-csharp">public class MyWrapper
{
    [XmlElement("A", Type = typeof(ChildA))]
    [XmlElement("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}</code>
Copier après la connexion

3. Utilisez l'attribut [XmlArrayItem] sur l'attribut :

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

Décommentez les paires d'attributs correspondantes en fonction de vos besoins spécifiques. En utilisant l'une de ces méthodes, XmlSerializer sera capable de gérer les classes dérivées lors de la sérialisation et de la désérialisation.

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