Verwenden Sie XmlSerializer, um abgeleitete Klassen zu serialisieren
Das Serialisieren von Objekten, die generische Listen abstrakter Basisklassen enthalten, kann bei der Verwendung von XmlSerializer eine Herausforderung darstellen. In diesem Artikel wird untersucht, wie dieses Problem gelöst werden kann.
Frage:
Ein Objekt, das eine Liste abgeleiteter Klassen enthält (List
Lösung:
Um ein abgeleitetes Objekt erfolgreich zu serialisieren, können drei Methoden verwendet werden:
Codebeispiel:
Der folgende Code demonstriert drei Methoden:
<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>
Indem Sie die erforderlichen Attributpaare auskommentieren, können Sie die Lösung auswählen, die Ihren Anforderungen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWie kann ich mit XmlSerializer eine Liste der abgeleiteten Typen einer abstrakten Basisklasse serialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!