我将尽我所能保持这篇文章简洁明了。如果我需要进行大量编辑以添加代码,我很抱歉。反序列化XML结果中没有任何序列元素的数据
问题
我有一个类,我能够正确序列化为XML。该类将XML发送给返回XML响应的Web服务。 XML响应然后被反序列化为对象以进行额外的处理。我能够正确地反序列化我的对象,提供返回的XML是不是一个序列
我已经试过
我已经创建了我的课的样子:
[other class declarations here to support XML response]
public class OrderInfoListResponse
{
public List<OrderInfo> OrderInfo { get; set; }
public OrderInfoListResponse()
{
OrderInfo = new List<OrderInfo>();
}
}
解串器看起来像:
using (Stream respStream = response.GetResponseStream())
{
XmlSerializer serializer = new XmlSerializer(typeof(OrderListResponse));
orderResp = serializer.Deserialize(respStream) as OrderListResponse;
}
如果我传入的数据看起来像像:
<ResponseBody>
<PageInfo>
<TotalCount>51</TotalCount>
<TotalPageCount>6</TotalPageCount>
<PageSize>10</PageSize>
<PageIndex>1</PageIndex>
</PageInfo>
<RequestID>4546ASDDAS54</RequestID>
<OrderInfoList>
<OrderInfo>
<SellerID>XXXX</SellerID>
<OrderNumber>111111111</OrderNumber>
<InvoiceNumber>222222</InvoiceNumber>
....
</OrderInfo>
<OrderInfoList>
我能不isses得到PageInfo数据和请求ID,但我得到的对象显示
OrderInfoList
OrderInfo count = 0
如果我显示的响应作为一个字符串,我得到51层的反应。
问题
为什么我不能够反序列化到订单信息?
我已经试过
我尝试下面的代码,但我的数仍为0:
using (Stream respStream = response.GetResponseStream())
{
StreamReader readerOK = new StreamReader(respStream);
string resp = @readerOK.ReadToEnd();
var myEncoder = new ASCIIEncoding();
var bytes = myEncoder.GetBytes(resp);
var memoryStream = new MemoryStream(bytes);
var xmlSerializer = new XmlSerializer(typeof(OrderListResponse));
orderResp = xmlSerializer.Deserialize(memoryStream) as OrderListResponse;
}
设置上myEncoder断点显示字符串RESP包含一个完整的XML响应,在orderResp之后设置一个断点,显示除列表对象以外的所有字段。
我已经实例化了我的orderResp对象,通过在方法开始时将其设置为null。我还实例化了该类中包含的每个对象的实例,但都没有结果。
如果我从类中删除所有集合(列表,数组等),我可以反序列化XML文件中的第一个响应,后续响应不会被反序列化并被跳过。
还有其他想法吗?任何人?
刚编辑我的答案... – 2012-08-01 15:06:54