【问题标题】:Standard XML Serialization but omit the parent tag标准 XML 序列化,但省略父标记
【发布时间】:2014-04-15 20:47:18
【问题描述】:

我尝试将以下代码序列化为 XML 格式:

public class FieldServers
{
    public List<FieldServer> FieldServer = new List<FieldServer>();
}

public class FieldServer
{
    [XmlAttribute("ID")]
    public string ID { get; set; }
    public List<Item> EntryPoints = new List<Item>();
}

public class Item
{
    [XmlAttribute("Name")]
    public string Name { get; set; }

    [XmlAttribute("Data")]
    public string Data { get; set; }

    [XmlAttribute("Type")]
    public string Type { get; set; }
}

使用上面的类结构,我可以生成如下的一些数据:

<?xml version="1.0" encoding="utf-8"?>
<FieldServers>
  <FieldServer>
    <FieldServer ID="11">
      <EntryPoints>
         <Item Name="ItemName" Data="ItemData" Type="ItemType" />
      </EntryPoints>
    </FieldServer>
  </FieldServer>
</FieldServers>

谁能告诉我如何修改类序列化属性以使数据看起来类似于下面的数据?我一直在尝试最后一个小时没有成功。如果我在类中保留我的列表结构,这可能吗?

<?xml version="1.0" encoding="utf-8"?>
<FieldServers>
   <FieldServer ID="11">
       <Item Name="Item Name" Data="Item Data" Type="Item Type" />
       <Item Name="Item Name 2" Data="Item Data 2" Type="Item Type 2" />
   </FieldServer>
   <FieldServer ID="12">
       <Item Name="Item Name" Data="Item Data" Type="Item Type" />
   </FieldServer>
</FieldServers>

【问题讨论】:

    标签: c# serialization xml-serialization


    【解决方案1】:

    如果您使用XmlElement attribute 装饰您的集合FieldServerEntryPoints 属性,它将生成您想要的XML:

    public class FieldServers
    {
        [XmlElement] //add this line
        public List<FieldServer> FieldServer = new List<FieldServer>();
    }
    
    public class FieldServer
    {
        [XmlAttribute("ID")]
        public string ID { get; set; }
    
        [XmlElement("Item")] //add this line
        public List<Item> EntryPoints = new List<Item>();
    }
    

    编辑:我错过了 EntryPoints 元素的重命名。在属性中指定元素名称以使其匹配。 (即有[XmlElement("Item")]

    使用你拥有的类,我复制了相同的值并生成了具有上述属性更改的 XML:

    <?xml version="1.0"?>
    <FieldServers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <FieldServer ID="11">
        <Item Name="Item Name" Data="Item Data" Type="Item Type" />
        <Item Name="Item Name 2" Data="Item Data 2" Type="Item Type 2" />
      </FieldServer>
      <FieldServer ID="12">
        <Item Name="Item Name" Data="Item Data" Type="Item Type" />
      </FieldServer>
    </FieldServers>
    

    【讨论】:

    • 非常感谢。我知道它必须简单,但感谢您的简明扼要和优雅的回答。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2011-09-26
    • 2015-04-20
    相关资源
    最近更新 更多