【问题标题】:How to add an attribute to an XML node when that node is serialised from a List?从 List 序列化 XML 节点时,如何向 XML 节点添加属性?
【发布时间】:2011-02-23 09:53:21
【问题描述】:

我昨天问this question,想知道如何使用MVCContrib 生成带有属性的XML。答案是使用[XmlAttribute]

从那以后,我已经成功地使用[XmlAttribute] 获取了以下 XML:

<?xml version="1.0" encoding="utf-8"?>
<TopTen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SectorName>Property - Direct UK</SectorName>
  <PerformanceTo>2011-01-31T00:00:00</PerformanceTo>
  <OrderedShareClassReturns>
    <OrderedShareClassReturn Name="Property L" Performance="11.074980" />
    <OrderedShareClassReturn Name="UK Property Trust I Inc" Performance="10.512610" />
    <OrderedShareClassReturn Name="UK Property Trust I Acc" Performance="10.466310" />
    <OrderedShareClassReturn Name="UK Property Trust R Inc" Performance="9.725650" />
  </OrderedShareClassReturns>
</TopTen>

现在我需要向 XML 添加第二个 &lt;ShareClassReturns&gt; 节点,并且我想向该元素添加一个属性,因此 XML 变为:

<?xml version="1.0" encoding="utf-8"?>
<TopTen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SectorName>Property - Direct UK</SectorName>
  <PerformanceTo>2011-01-31T00:00:00</PerformanceTo>
  <OrderedShareClassReturns order="top"> // how can I add the "top" & "bottom" attributes?
    <OrderedShareClassReturn Name="Property L" Performance="11.074980" />
    <OrderedShareClassReturn Name="UK Property Trust I Inc" Performance="10.512610" />
    <OrderedShareClassReturn Name="UK Property Trust I Acc" Performance="10.466310" />
    <OrderedShareClassReturn Name="UK Property Trust R Inc" Performance="9.725650" />
  </OrderedShareClassReturnss>
  <OrderedShareClassReturns order="bottom">
    <OrderedShareClassReturn Name="Property L" Performance="0.074980" />
    <OrderedShareClassReturn Name="UK Property Trust I Inc" Performance="1.512610" />
    <OrderedShareClassReturn Name="UK Property Trust I Acc" Performance="2.466310" />
    <OrderedShareClassReturn Name="UK Property Trust R Inc" Performance="3.725650" />
  </OrderedShareClassReturns>
</TopTen>

但我不知道该怎么做。我正在序列化的对象定义为:

public class TopTen
{

    public string SectorName { get; set; }
    public DateTime PerformanceTo { get; set; }

    public List<OrderedShareClassReturn> OrderedShareClassReturns { get; set; }
}

public class OrderedShareClassReturn
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlAttribute]
    public decimal Performance { get; set; }
}

所以问题是,如何将该属性添加到&lt;OrderedShareClassReturns&gt; 元素?我是否需要将OrderedShareClassReturns 定义为实现List&lt;OrderedShareClassReturn&gt; 的类,并拥有一个名为order 的属性,该属性具有[XmlAttribute]?还是有更简单的方法?

【问题讨论】:

    标签: c# xml xml-serialization mvccontrib


    【解决方案1】:

    为此,您需要添加另一个类:

    public class ReturnsWrapper {
    
        [XmlElement("OrderedShareClassReturn")]
        public List<OrderedShareClassReturn> Items { get; set; }
    
        [XmlAttribute("order")]
        public string Order {get;set;}
    }
    

    并且拥有:

    public class TopTen
    {
    
        public string SectorName { get; set; }
        public DateTime PerformanceTo { get; set; }
        [XmlElement("OrderedShareClassReturns")]
        public List<ReturnsWrapper> Returns { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多