簡體   English   中英

序列化成員類型而不使用.NET中的XmlInclude

[英]Serialize member types without using XmlInclude in .NET

我在.NET中執行XML序列化

我有以下課程

public class MainClass
{
    public ClassA A;
}

public class ClassA { }

public class ClassB : ClassA { }

public class ClassC : ClassA { }

當我在MainClass的對象上調用XmlSerializer Serialize方法時,我得到了建議使用XmlInclude屬性的異常。 我不想使用attributes選項。

Serialize方法有一個重載,它接受Type數組來指定正在進行序列化的類型的子類型(上例中的MainClass)。 使用此重載,我們可以避免使用XmlInclude屬性標記類。

是否可以對類型的成員(上例中的MainClass)進行類似的處理?

var ser = new XmlSerializer(typeof(MainClass),
    new[] { typeof(ClassA), typeof(ClassB), typeof(ClassC) });
ser.Serialize(writer, new MainClass { A = new ClassB() });

結果:

<MainClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <A xsi:type="ClassB" />
</MainClass>

或者,您可以以編程方式添加屬性:

var overrides = new XmlAttributeOverrides();
// Add [XmlElement]'s to MainClass.A
overrides.Add(typeof(MainClass), "A", new XmlAttributes
{
    XmlElements = {
        new XmlElementAttribute() { Type = typeof(ClassA) },
        new XmlElementAttribute() { Type = typeof(ClassB) },
        new XmlElementAttribute() { Type = typeof(ClassC) },
    }
});

var ser = new XmlSerializer(typeof(MainClass), overrides, null, null, null);
ser.Serialize(writer, new MainClass { A = new ClassB() });

結果:

<MainClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ClassB />
</MainClass>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM