Как добавить атрибут в XML node, когда этот node сериализуется из списка?

62
4

Вчера я спросил этот вопрос, задаваясь вопросом, как создавать XML-атрибуты с использованием MVCContrib. Ответ заключался в использовании [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>

Теперь мне нужно добавить второй <ShareClassReturns> node в 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]? Или есть более простой способ?

спросил(а) 2021-01-25T15:09:31+03:00 4 месяца, 2 недели назад
1
Решение
88

Для этого вам нужно добавить еще один класс:


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

ответил(а) 2021-01-25T15:09:31+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема