首页 > 后端开发 > C++ > 如何在数组的 XML 序列化中禁用根元素呈现?

如何在数组的 XML 序列化中禁用根元素呈现?

Mary-Kate Olsen
发布: 2025-01-03 16:34:41
原创
776 人浏览过

How to Disable Root Element Rendering in XML Serialization for Arrays?

XML 序列化:禁用数组中根元素的渲染

序列化是软件开发中的一个关键过程,它使对象能够转换为持久格式,如 XML。但是,有时您可能希望修改序列化行为,例如禁用集合的根元素渲染。

禁用根元素渲染

考虑表示商店商品的类,包含产品名称和变体列表。默认情况下,使用 [XmlRoot] 和 [XmlArrayItem] 等 XML 注释进行序列化会生成以下 XML:

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <Variants>
    <VARIANT>
      <PRODUCTNAME>hi 1</PRODUCTNAME>
    </VARIANT>
    <VARIANT>
      <PRODUCTNAME>hi 2</PRODUCTNAME>
    </VARIANT>
  </Variants>
</SHOPITEM>
登录后复制

但是,您可能希望完全消除 Variants 元素。为此,请在代码中将 [XmlArrayItem] 属性替换为 [XmlElement]。这指示序列化器将变体渲染为 SHOPITEM 根元素的直接子元素。

<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
登录后复制

删除命名空间

您可能还会注意到 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; }
}

// ...

ShopItem item = new ShopItem()
{
    ProductName = "test",
    Variants    = new List<ShopItem>()
    {
        new ShopItem{ ProductName = "hi 1" },
        new ShopItem{ ProductName = "hi 2" }
    }
};

// This will remove the xsi/xsd namespaces from serialization
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

XmlSerializer ser = new XmlSerializer(typeof(ShopItem));
ser.Serialize(Console.Out, item, ns);
登录后复制

输出

不带 Variants 元素和命名空间的结果 XML:


<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
登录后复制

以上是如何在数组的 XML 序列化中禁用根元素呈现?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板