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
Freigeben: 2025-01-11 10:35:46
Original
432 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage