Я пытаюсь десериализовать XML-файл в программе на C #, который выглядит следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<Addresses>
<ListName>Flowers</ListName>
<Address contextRef="RP.CC">Some Address</Address>
<Address contextRef="RP.BE">Some Other Address</Address>
<Address contextRef="RP.BV">Yet Another Address</Address>
<Address contextRef="RP.CAL">Wow, I Can't Believe It's Another Address</Address>
</Addresses>
У меня нет никакого контроля над форматом этого файла. Но он всегда будет иметь некоторую комбинацию этих 4-х элементов Address (то есть эти 4 значения атрибута contextRef являются единственными используемыми) с различными значениями элемента каждый раз.
Теперь, вместо десериализации в массив адресов, мне нужно отправить их отдельным свойствам в объекте адресов. Моя текущая реализация использует массив, а затем метод установки для установки этих свойств на основе contextRef следующим образом:
public class Addresses
{
[XmlElement("ListName")]
public string ListName { get; set; }
private Address[] _addresses;
[XmlElement("Address")]
public Address[] AddressesArray
{
get
{
return _addresses;
}
set
{
_addresses = value;
SetAddress();
}
}
[XmlIgnore]
public Address AddressG21 { get; set; }
[XmlIgnore]
public Address AddressG22 { get; set; }
[XmlIgnore]
public Address AddressG23 { get; set; }
[XmlIgnore]
public Address AddressG9 { get; set; }
private void SetAddress()
{
foreach (var address in _addresses)
{
if (address.ContextRef == "RP.CC")
{
AddressG21 = address;
}
else if (address.ContextRef == "RP.BE")
{
AddressG22 = address;
}
else if (address.ContextRef == "RP.BV")
{
AddressG23 = address;
}
else if (address.ContextRef == "RP.CAL")
{
AddressG9 = address;
}
}
}
}
Где объект Address определяется следующим образом:
public class Address
{
private string valueField;
/// <remarks/>
[XmlText]
public string Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
[XmlAttribute("contextRef")]
public string ContextRef { get; set; }
}
Итак, мой вопрос заключается в том, существует ли более точный / лучший способ десериализации этого XML непосредственно в свойствах AddressG21 и т. Д. Без предварительного использования массива Address?
Заранее спасибо.