Heim >Backend-Entwicklung >C++ >Wie serialisiere ich abgeleitete Klassen in generischen Listen mit XmlSerializer?

Wie serialisiere ich abgeleitete Klassen in generischen Listen mit XmlSerializer?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-11 10:42:45535Durchsuche

How to Serialize Derived Classes within Generic Lists using 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:

  1. [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.
  2. 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.
  3. Kombination zweier Methoden: Kombinieren Sie diese beiden Methoden, indem Sie [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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn