.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中文网其他相关文章!