Heim >Backend-Entwicklung >C++ >Wie serialisiere ich abgeleitete Klassen in generischen Listen mit XmlSerializer?
Verwenden Sie XmlSerializer, um abgeleitete Klassen zu serialisieren
Wenn Benutzer XmlSerializer verwenden, um ein Objekt zu serialisieren, das eine generische Liste von von abstrakten Klassen abgeleiteten Klassen enthält, kann es während des Deserialisierungsprozesses zu einer InvalidOperationException-Ausnahme kommen. Um dieses Problem zu lösen, sind spezielle Techniken zur Handhabung der Serialisierung abgeleiteter Objekte erforderlich.
Lösung
Es gibt drei wirksame Methoden:
[XmlInclude]
Attribute: Wendet das [XmlInclude]
-Attribut vor der abstrakten Klassendeklaration an, einschließlich jedes abgeleiteten Klassentyps. Dadurch wird sichergestellt, dass der Serialisierer weiß, wie er mit diesen spezifischen abgeleiteten Typen umgeht. XmlElement
/XmlArrayItem
Attribute: Verwenden Sie das Attribut [XmlElement]
oder [XmlArrayItem]
für ein Attribut, das eine Liste enthält. Geben Sie in diesen Eigenschaften den Typ der abgeleiteten Klasse an, um den Serialisierer anzuweisen, das Objekt zu erkennen und zu deserialisieren. [XmlInclude]
für abstrakte Klassen und [XmlElement]
oder [XmlArrayItem]
für Eigenschaften verwenden, um so eine explizite und implizite Typbehandlung bereitzustellen. Die folgenden Codeausschnitte bieten detaillierte Implementierungsbeispiele für jede Methode:
<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>
Wählen Sie die bevorzugte Methode aus und kommentieren Sie das entsprechende Code-Snippet für die Serialisierung abgeleiteter Klassen aus.
Das obige ist der detaillierte Inhalt vonWie serialisiere ich abgeleitete Klassen in generischen Listen mit XmlSerializer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!