Heim >Backend-Entwicklung >C++ >Wie kann ich generische Listen abgeleiteter Klassen mit XmlSerializer erfolgreich serialisieren und deserialisieren?

Wie kann ich generische Listen abgeleiteter Klassen mit XmlSerializer erfolgreich serialisieren und deserialisieren?

Barbara Streisand
Barbara StreisandOriginal
2025-01-11 10:35:46476Durchsuche

How Can I Successfully Serialize and Deserialize Generic Lists of Derived Classes Using XmlSerializer?

Serialisieren und Deserialisieren generischer Listen abgeleiteter Klassen mit XmlSerializer

XmlSerializer stellt eine Herausforderung dar, wenn Objekte serialisiert werden, die generische Listen abgeleiteter Klassen enthalten. Die abstrakte Basisklassennatur dieser abgeleiteten Elemente führt während der Deserialisierung häufig zu einem InvalidOperationException. Lassen Sie uns nach Lösungen für dieses häufige Problem suchen.

Behebung des Serialisierungs-/Deserialisierungsproblems

Es gibt drei wirksame Strategien, um diese Einschränkung zu überwinden:

1. Verwendung des [XmlInclude] Attributs

<code class="language-csharp">//1: [XmlInclude(typeof(ChildA))]
//1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass { /* ... */ }</code>

Diese Methode erfordert das Annotieren der Basisklasse (ChildClass) mit dem Attribut [XmlInclude] für jede einzelne abgeleitete Klasse.

2. Beschäftigung [XmlElement] oder [XmlArrayItem] auf dem Grundstück

<code class="language-csharp">    //2: [XmlElement("A", Type = typeof(ChildA))]
    //2: [XmlElement("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }</code>

Hier wird das Attribut [XmlElement] oder [XmlArrayItem] direkt auf die Eigenschaft angewendet, die die Liste der abgeleiteten Klassen enthält. Dadurch werden dem Serialisierer explizite Typinformationen bereitgestellt.

3. Nutzung [XmlArrayItem]der Immobilie

<code class="language-csharp">    //3: [XmlArrayItem("A", Type = typeof(ChildA))]
    //3: [XmlArrayItem("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }</code>

Dieser Ansatz spiegelt Methode 2 wider, verwendet jedoch [XmlArrayItem] anstelle von [XmlElement] und bietet eine etwas andere XML-Struktur.

Den richtigen Ansatz wählen

Jeder dieser Ansätze ermöglicht eine erfolgreiche Serialisierung und Deserialisierung von Objekten mit Listen abgeleiteter Klassen. Die optimale Wahl hängt von den spezifischen Anforderungen Ihrer Anwendung an XML-Struktur und Flexibilität ab.

Das obige ist der detaillierte Inhalt vonWie kann ich generische Listen abgeleiteter Klassen mit XmlSerializer erfolgreich serialisieren und deserialisieren?. 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