在 XML 序列化中,通常需要抑制集合根元素的呈現。這可以簡化 XML 結構並提高可讀性。本文介紹如何使用 ASP.NET 的 XmlSerializer 來實現此目的。
考慮以下具有XML 序列化屬性的ShopItem 類別:
[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>
如您所見,一個不需要的
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // Replaced [XmlArrayItem] public List<ShopItem> Variants { get; set; } }
此修改會產生以下簡化的 XML:
<SHOPITEM> <PRODUCTNAME>test</PRODUCTNAME> <VARIANT> <PRODUCTNAME>hi 1</PRODUCTNAME> </VARIANT> <VARIANT> <PRODUCTNAME>hi 2</PRODUCTNAME> </VARIANT> </SHOPITEM>
此外,您可能會遇到XML 命名空間,例如根元素中的 xsi 和 xsd。若要刪除這些,請建立一個具有空命名空間的 XmlSerializerNamespaces 實例,並在序列化期間傳遞它。
以下是一個範例:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
這將從 XML 輸出中消除不需要的命名空間。
以上是如何使用 XmlSerializer 從 XML 陣列中刪除根元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!