XMLSerializer is not correctly deserializing XML for a property of type List
c#, xml-serialization
Solution
The problem is that what you have declared doesn't actually match your XML. If you serialize an object from your current declaration, you get:
<?xml version="1.0" encoding="utf-16"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Clients>
<ID>1</ID>
<Name>John</Name>
<Age>25</Age>
<Address>Some address</Address>
</Clients>
</Response>
Try:
[XmlRoot("Response")]
public class MyClients
{
[XmlArray("Clients")]
[XmlArrayItem("Client")]
public List<MyClient> Clients { get; set; }
}
[XmlRoot("Client")]
public class MyClient
{
[XmlElement("ID")]
public int ID;
[XmlElement("Name")]
public string Name;
[XmlElement("Age")]
public int Age;
[XmlElement("Address")]
public string Address;
}
Which produces:
<?xml version="1.0" encoding="utf-16"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Clients>
<Client>
<ID>1</ID>
<Name>John</Name>
<Age>25</Age>
<Address>Some address</Address>
</Client>
</Clients>
</Response>
Problem
I get an XML type data, such as this; ``` <Response> <Clients> <Client> <ID>1</ID> <Name>John</Name> <Age>25</Age> <Address>Some address</Address> </Client> <Client> <ID>2</ID> <Name>Mark</Name> <Age>22</Age> <Address>Some address2</Address> </Client> <Client> <ID>3</ID> <Name>Phil</Name> <Age>30</Age> <Address>Some address3</Address> </Client> </Clients> </Response> ``` In C# I have the following code: ``` [XmlRoot("Response")] public class MyClients { [XmlElement("Clients", typeof(MyClient))] public List<MyClient> Clients { get; set; } } public class MyClient { [XmlElement("ID")] public int ID; [XmlElement("Name")] public string Name; [XmlElement("Age")] public int Age; [XmlElement("Address")] public string Address; } ``` and I try to get this data, using ``` public ActionResult GetClients() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("someUrl"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); XmlSerializer serializer = new XmlSerializer(typeof(WFMClientsList)); Stream receiveStream = response.GetResponseStream(); WFMClientsList clients = (MyClients)serializer.Deserialize(receiveStream); } ``` but I get nothing in response. Can anyone explain how to deserialize XML to `List<MyClient>` correctly?