Я работаю над проектом, который возвращает один блок XML как таковой:
<root>
<x_val />
<x_val2 />
<x_addr1 />
<x_addr2 />
<x_city />
<x_state />
<x_country />
<x_zip />
</root>
В этом проекте я могу сделать несколько вызовов, которые возвращают различную информацию, но большинство из них будут содержать информацию об адресе внизу.
При написании своих классов C# я бы предпочел не создавать свойства для каждого из этих узлов в каждом отдельном объекте ответа, который я создаю. Вместо этого я бы предпочел определить один объект Address для использования как таковой:
[XmlRoot("root")]
[Serializable]
public class ReturnItem1
{
[XmlElement("x_val")]
public string FirstValue{ get; set; }
[XmlElement("x_val2")]
public string SecondValue{ get; set; }
public Address AddressInfo { get; set; }
public ReturnItem1()
{
AddressInfo = new Address();
}
}
public class Address
{
[XmlElement("x_addr1")]
public string Address1 { get; set; }
[XmlElement("x_addr2")]
public string Address2 { get; set; }
[XmlElement("x_city")]
public string City { get; set; }
[XmlElement("x_state")]
public string State { get; set; }
[XmlElement("x_country")]
public string Country { get; set; }
[XmlElement("x_zip")]
public string PostalCode { get; set; }
}
При десериализации я выполняю следующую логику (ответ имеет тип XElement):
var serializer = new XmlSerializer(typeof(ReturnItem1));
var returnObject = (ReturnItem1)serializer.Deserialize(response.CreateReader());
Значения для FirstValue и SecondValue заполняются в returnObject, но свойства в Address всегда имеют значение null.
Я попытался добавить атрибут [XmlRoot("root)"] в класс Address, но это не сработало. Также не было задано для атрибута XmlElement свойства Address в ReturnItem1 значение «root» или любое другое имя узла.
Есть ли способ использовать этот подход для десериализации одного XML-узла в объект с одним или несколькими подобъектами?