.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>
但是,目標是刪除
要停用集合根元素的呈現,請在程式碼中將 [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中文網其他相關文章!