XML 序列化:抑制根數組元素
問題:
問題:[XmlRoot(ElementName="SHOPITEM", Namespace="")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlArrayItem("VARIANT")] public List<ShopItem> Variants { get; set; } }可以序列化XML集合的根元素被禁用?考慮以下帶有屬性的類別:
<SHOPITEM xmlns:xsi="" xmlns:xsd=""> <PRODUCTNAME>test</PRODUCTNAME> <Variants> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </Variants> </SHOPITEM>該類別產生帶有根
如何從輸出省略?另外,如何從根元素中刪除 xsi 和 xsd 命名空間?
答案:[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // was [XmlArrayItem] public List<ShopItem> Variants { get; set; } }要消除
// ... ShopItem item = new ShopItem() { ProductName = "test", ... }; // This removes the xsi/xsd namespaces from serialization XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns); // Pass XmlSerializerNamespaces here
<?xml version="1.0" encoding="ibm850"?> <SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>若要刪除xsi 和xsd 命名空間,請建立一個具有空命名空間的XmlSerializerNamespaces實例並在序列化期間使用它:產生的 XML 將具有所需的格式:
以上是如何在 XML 序列化中抑制根數組元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!