如何从List序列化该节点时,如何将属性添加到XML节点?

时间:2011-02-23 09:53:22

标签: c# xml xml-serialization mvccontrib

昨天我问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中添加第二个<ShareClassReturns>节点,并且我想为该元素添加一个属性,因此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; }
}

所以问题是,如何将该属性添加到<OrderedShareClassReturns>元素?我是否需要将OrderedShareClassReturns定义为实现List<OrderedShareClassReturn>的类,并且具有名为order的属性[XmlAttribute]?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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; }
}