Рассмотрим следующее упрощенное XML. Я получаю его от службы и не имею никакого влияния на его структуру. Он содержит 3 тега, которые определяются их порядком, то есть первый <string>
всегда ссылается на одно и то же свойство .
<?xml version="1.0" encoding="UTF-8"?>
<result>
<entry>
<string>foo</string>
<int>42</int>
<string>bar</string>
</entry>
<entry>
<string>baz</string>
<int>1234</int>
<string>foobar</string>
</entry>
</result>
Я бы хотел десериализовать <entry>
элементы в класс с отдельными свойствами, например
public class ResultEntry {
// this property equals to the 1st-occuring <string> element in the XML
public String PropA { get; set; }
// this property equals to the 2nd-occuring <string> element in the XML
public String PropB { get; set; }
// this property equals to the <int> element in the XML
public Int32 PropC { get; set; }
}
Есть ли способ десериализации двух <string>
элементов в два разных свойства? Я не могу просто добавить аннотацию [XmlElement(ElementName="string")]
к ним обоим, так как это приводит к InvalidOperationException
.
Одним из способов может быть добавление свойства типа
[XmlElement(ElementName="string")]
public List<string> StringVals {get; set;}
и вручную переместить значения позже, но мне это кажется слишком хаки .