У меня есть XML файл, который выглядит примерно так:
<root>
<data label="product data" min="0" max="10">
<option>
<id>1</id>
<name>Name1</name>
</option>
<option>
<id>2</id>
<name>Name2</name>
</option>
<option>
<id>3</id>
<name>Name3</name>
</option>
</data>
</root>
Мне нужно получить оба атрибута data
и список опций.
Я пробовал это:
[XmlRoot(ElementName = "root")]
public class Data
{
// Retreive data attributes
[XmlElement(ElementName = "data")]
public Options Attributes { get; set; }
// Retrieve option list
[XmlArray("data")]
[XmlArrayItem("option", Type = typeof(GeneralOptions))]
public GeneralOptions[] Options { get; set; }
}
Дополнительные классы:
Опции
public class Options
{
[XmlAttribute("label")]
public string Label{ get; set; }
[XmlAttribute("min")]
public string Min{ get; set; }
[XmlAttribute("max")]
public string Max{ get; set; }
}
GeneralOptions
public class GeneralOptions
{
[XmlElement(ElementName = "id")]
public string Id { get; set; }
[XmlElement(ElementName = "name")]
public string Name{ get; set; }
}
Но когда я пытаюсь десериализовать объект, он запускает следующее исключение:
Элемент XML 'data' из пространства имен '' уже присутствует в текущей области. Используйте атрибуты XML, чтобы указать другое XML имя или пространство имен для элемента.
Я думаю, проблема в том, что я пытаюсь получить один и тот же элемент "дважды". Но мне нужно вернуть обе вещи. Я не могу использовать [Attribute]
, потому что есть несколько атрибутов для извлечения, и мне нужно сделать это с несколькими XML элементами с одинаковым форматом, и я хочу использовать его повторно.
Итак, как мне вернуть их обоих?