首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >XML序列化-禁用呈现数组的根元素

XML序列化-禁用呈现数组的根元素
EN

Stack Overflow用户
提问于 2010-01-05 22:08:15
回答 2查看 60.1K关注 0票数 126

我能以某种方式禁用集合根元素的渲染吗?

这个类具有序列化属性:

代码语言:javascript
复制
[XmlRoot(ElementName="SHOPITEM", Namespace="")]
public class ShopItem
{
    [XmlElement("PRODUCTNAME")]
    public string ProductName { get; set; }       
    
    [XmlArrayItem("VARIANT")]
    public List<ShopItem> Variants { get; set; }
}

生成此XML:

代码语言:javascript
复制
<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>

我不想在这里使用<Variants>元素。我必须做什么?

此外,我不需要在根元素中使用xsi和xsd名称空间...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-05 22:27:26

若要禁用集合根元素的呈现,必须在代码中将属性[XmlArrayItem]替换为[XmlElement]

要删除xsixsd名称空间,请创建一个具有空名称空间的XmlSerializerNamespaces实例,并在需要序列化对象时传递该实例。

看一下这个例子:

代码语言:javascript
复制
[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);  // Inform the XmlSerializerNamespaces here

我得到了以下输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="ibm850"?>
<SHOPITEM>
  <PRODUCTNAME>test</PRODUCTNAME>
  <VARIANT>
    <PRODUCTNAME>hi 1</PRODUCTNAME>
  </VARIANT>
  <VARIANT>
    <PRODUCTNAME>hi 2</PRODUCTNAME>
  </VARIANT>
</SHOPITEM>
票数 195
EN

Stack Overflow用户

发布于 2010-01-05 22:27:30

[XmlElement("VARIANT")]替换[XmlArrayItem("VARIANT")]

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2006482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档