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!