C# XMLSerializer未正确反序列化List类型属性的XML

C# XMLSerializer未正确反序列化List类型属性的XML,c#,xml-serialization,C#,Xml Serialization,我得到了一个XML类型的数据,如下所示 <Response> <Clients> <Client> <ID>1</ID> <Name>John</Name> <Age>25</Age> <Address>Some address</Address> </Client> <C

我得到了一个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>
但我没有得到任何回应


谁能解释一下如何将XML反序列化到
列表
正确吗?

这是错误的
XmlSerializer serializer=new XmlSerializer(typeof(WFMClientsList))
必须是
XmlSerializer serializer=新的XmlSerializer(typeof(MyClients))

您丢失了类
MyClient

公共静态T反序列化对象(字符串xml)的属性
  public static T DeserializeObject<T>(string xml)
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));
            MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xml));
            XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
            return (T)xs.Deserialize(memoryStream);
        }


private static Byte[] StringToUTF8ByteArray(string pXmlString)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] byteArray = encoding.GetBytes(pXmlString);
            return byteArray;
        }
{ XmlSerializer xs=新的XmlSerializer(typeof(T)); MemoryStream MemoryStream=新的MemoryStream(StringToUTF8ByteArray(xml)); XmlTextWriter XmlTextWriter=新的XmlTextWriter(memoryStream,Encoding.UTF8); 返回(T)xs.反序列化(memoryStream); } 专用静态字节[]StringToUTF8ByteArray(字符串pXmlString) { UTF8Encoding=新的UTF8Encoding(); byte[]byteArray=encoding.GetBytes(pXmlString); 乘火车返回; }
问题在于您声明的内容实际上与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>

1.
约翰
25
某个地址
尝试:

[XmlRoot(“响应”)]
公共类MyClient
{
[XmlArray(“客户端”)]
[XmlArrayItem(“客户”)]
公共列表客户端{get;set;}
}
[XmlRoot(“客户端”)]
公共类MyClient
{
[XmlElement(“ID”)]
公共int ID;
[XmlElement(“名称”)]
公共字符串名称;
[XmlElement(“年龄”)]
公共信息;
[XmlElement(“地址”)]
公共字符串地址;
}
产生:

<?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>

1.
约翰
25
某个地址

是的,这是我的不匹配。在写这个问题的过程中,我试图使类名更简单。当然,那里必须是“我的客户”。还是不行!
<?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>
[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;
}
<?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>