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

Wie serialisiere ich abgeleitete Klassen in generischen Listen mit XmlSerializer?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-11 09:27:43575Durchsuche

How to Serialize Derived Classes in Generic Lists with XmlSerializer?

Verwenden Sie XmlSerializer, um abgeleitete Klassen zu serialisieren

Bei der Verwendung von XmlSerializer für die XML-Serialisierung können beim Umgang mit Objekten, die von abstrakten Klassen abgeleitete generische Listen enthalten, Probleme auftreten. Versuche, solche Objekte zu deserialisieren, können zu einer InvalidOperationException führen.

Um dieses Problem zu beheben, können Sie eine der folgenden drei Methoden verwenden:

1. Verwenden Sie das Attribut [XmlInclude] für den Basistyp:

<code class="language-csharp">using System.Xml.Serialization;

[XmlInclude(typeof(ChildA))]
[XmlInclude(typeof(ChildB))]
public abstract class ChildClass
{
    public string ChildProp { get; set; }
}</code>

2. Verwenden Sie das Attribut [XmlElement] für das Attribut:

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

3. Verwenden Sie das Attribut [XmlArrayItem] für das Attribut:

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

Entkommentieren Sie die entsprechenden Attributpaare entsprechend Ihren spezifischen Anforderungen. Durch die Verwendung einer dieser Methoden kann XmlSerializer abgeleitete Klassen während der Serialisierung und Deserialisierung verarbeiten.

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