XMLSerializer未正确地为List类型的属性反序列化XML

Joh*_*ead 3 c# xml-serialization

我得到一个XML类型的数据,比如这个;

<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>
Run Code Online (Sandbox Code Playgroud)

在C#中,我有以下代码:

[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;
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用这个数据

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);
}
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何答复.

任何人都可以解释如何List<MyClient>正确反序列化XML ?

Jam*_*See 5

问题是您声明的内容实际上与您的XML不匹配.如果从当前声明序列化对象,则会得到:

<?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>
Run Code Online (Sandbox Code Playgroud)

尝试:

[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;
}
Run Code Online (Sandbox Code Playgroud)

哪个产生:

<?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>
Run Code Online (Sandbox Code Playgroud)