首頁 > 後端開發 > C++ > 如何在 .NET 序列化期間從 XML 集合中刪除根元素?

如何在 .NET 序列化期間從 XML 集合中刪除根元素?

Susan Sarandon
發布: 2024-12-31 17:10:11
原創
692 人瀏覽過

How to Remove the Root Element from an XML Collection during .NET Serialization?

XML 序列化 - 停用集合中的根元素渲染

問題:

.NET 中的 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="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
登入後複製

但是,目標是刪除 。完全元素。此外,根元素中應省略 xsi 和 xsd 命名空間。這可能嗎?

答案:

要停用集合根元素的呈現,請在程式碼中將 [XmlArrayItem] 屬性替換為 [XmlElement]。若要刪除 xsi 和 xsd 命名空間,請建立一個具有空命名空間的 XmlSerializerNamespaces 實例,並在序列化期間傳遞它。

這是更新的範例:

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

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

// ...

// Create a serializer namespaces object
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

// Create a serializer and pass in the namespaces object
XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
登入後複製

這將產生以下輸出:

<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
登入後複製

以上是如何在 .NET 序列化期間從 XML 集合中刪除根元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板