C# XMLSerializer未正确反序列化List类型属性的XML
我得到了一个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
<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>