Heim > Backend-Entwicklung > C++ > Wie kann ich mit XmlSerializer eine Liste der abgeleiteten Typen einer abstrakten Basisklasse serialisieren?

Wie kann ich mit XmlSerializer eine Liste der abgeleiteten Typen einer abstrakten Basisklasse serialisieren?

Linda Hamilton
Freigeben: 2025-01-11 09:47:42
Original
999 Leute haben es durchsucht

How Can I Serialize a List of Abstract Base Class's Derived Types Using XmlSerializer?

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), wobei die abgeleitete Klasse abstrakt ist und während des Deserialisierungsprozesses eine InvalidOperationException verursachen kann.

Lösung:

Um ein abgeleitetes Objekt erfolgreich zu serialisieren, können drei Methoden verwendet werden:

  1. Verwenden Sie [XmlInclude]: Mit diesem Attribut können Sie abgeleitete Typen angeben, die bei der Serialisierung einbezogen werden sollen. Geeignet für Situationen, in denen die Anzahl der abgeleiteten Typen gering ist.
  2. Verwenden von XmlElement/XmlArrayItem: Mit diesen Eigenschaften können Sie den abgeleiteten Typ, der der Eigenschaft zugeordnet ist, direkt angeben. Eher geeignet für Situationen, in denen die Anzahl der abgeleiteten Typen groß ist.

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

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!

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