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
Mary-Kate Olsenoriginal
2025-01-11 09:27:43575parcourir

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>

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>

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>

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!

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