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!