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 :
[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. 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. [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>
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!