首頁 >後端開發 >C++ >如何在 XML 序列化中抑制根數組元素?

如何在 XML 序列化中抑制根數組元素?

Patricia Arquette
Patricia Arquette原創
2024-12-31 18:30:10870瀏覽

How to Suppress the Root Array Element in XML Serialization?

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>

該類別產生帶有根 的 XML。元素:

如何從輸出省略?另外,如何從根元素中刪除 xsi 和 xsd 命名空間?

答案:
[XmlRoot("SHOPITEM")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }

    [XmlElement("VARIANT")] // was [XmlArrayItem]
    public List<ShopItem> Variants { get; set; }
}

要消除元素,將集合屬性的[XmlArrayItem] 屬性替換為[XmlElement]:
// ...

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:CS-第 4 週下一篇:CS-第 4 週