首页 > 后端开发 > C++ > 如何在 .NET 序列化期间从 XML 集合中删除根元素?

如何在 .NET 序列化期间从 XML 集合中删除根元素?

Susan Sarandon
发布: 2024-12-31 17:10:11
原创
692 人浏览过

How to Remove the Root Element from an XML Collection during .NET Serialization?

XML 序列化 - 禁用集合中的根元素渲染

问题:

.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>
登录后复制

但是,目标是删除 。完全元素。此外,根元素中应省略 xsi 和 xsd 命名空间。这可能吗?

答案:

要禁用集合根元素的呈现,请在代码中将 [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中文网其他相关文章!

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