Utilisez XmlSerializer pour sérialiser les classes dérivées
La sérialisation d'objets contenant des listes génériques de classes de base abstraites peut présenter des défis lors de l'utilisation de XmlSerializer. Cet article explique comment résoudre ce problème.
Question :
Un objet contenant une liste de classes dérivées (List
Solution :
Afin de réussir à sérialiser un objet dérivé, trois méthodes peuvent être utilisées :
Exemple de code :
Le code suivant illustre trois méthodes :
<code class="language-csharp">using System; using System.Collections.Generic; using System.Xml.Serialization; // 方法一:使用 [XmlInclude] [XmlInclude(typeof(ChildA))] [XmlInclude(typeof(ChildB))] public abstract class ChildClass { public string ChildProp { get; set; } } // 方法二:使用 XmlElement public class MyWrapper { [XmlElement("ChildA", Type = typeof(ChildA))] [XmlElement("ChildB", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; } } // 方法三:使用 XmlArrayItem public class MyWrapper2 { [XmlArrayItem("ChildA", Type = typeof(ChildA))] [XmlArrayItem("ChildB", Type = typeof(ChildB))] public List<ChildClass> Data { get; set; } } public class ChildA : ChildClass { public string AProp { get; set; } } public class ChildB : ChildClass { public string BProp { get; set; } }</code>
En décommentant les paires d'attributs requises, vous pouvez choisir la solution la mieux adaptée à vos besoins.
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!