在 XML 序列化中禁用数组根元素的渲染
在 XML 序列化中,你可能会遇到需要禁用以下元素的渲染的情况:数组的根元素。这个问题说明了一个场景,其中具有对象集合的类被序列化,导致 XML 包含不需要的根元素。
解决方案:
禁用渲染对于根元素,您可以将集合属性上的 [XmlArrayItem] 属性替换为 [XmlElement]。这指示序列化器直接序列化集合元素,而不是将它们包含在根元素中。
此外,要从根元素中删除不必要的 xsi 和 xsd 命名空间,您可以创建一个带有空的 XmlSerializerNamespaces 实例。命名空间。可以在序列化期间传递此命名空间实例,以防止包含不需要的命名空间。
示例:
以下代码片段演示了修改后的类定义和序列化过程:
[XmlRoot("SHOPITEM")] public class ShopItem { [XmlElement("PRODUCTNAME")] public string ProductName { get; set; } [XmlElement("VARIANT")] // was [XmlArrayItem] public List<ShopItem> Variants { get; set; } } // ... XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); // Empty namespace to remove xsi/xsd XmlSerializer ser = new XmlSerializer(typeof(ShopItem)); ser.Serialize(Console.Out, item, ns);
完成这些更改后,生成的 XML 将不再包含“Variants”根元素,并且将缺少xsi/xsd 命名空间。这有效地禁用了数组根元素的渲染。
以上是如何防止数组根元素的 XML 序列化?的详细内容。更多信息请关注PHP中文网其他相关文章!