2011-02-23 30 views
1

昨天我问了this question,想知道如何使用MVCContrib生成带有属性的XML。答案是使用[XmlAttribute]如何将一个属性添加到XML节点,当该节点从列表序列化?

因为,我已经成功地使用[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> 

现在我需要一个第二<ShareClassReturns>节点添加到XML,和我想的属性添加到该元素,所以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]?还是有更简单的方法?

回答

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