2012-07-31 35 views
0

我将尽我所能保持这篇文章简洁明了。如果我需要进行大量编辑以添加代码,我很抱歉。反序列化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文件中的第一个响应,后续响应不会被反序列化并被跳过。

还有其他想法吗?任何人?

+0

刚编辑我的答案... – 2012-08-01 15:06:54

回答

0

问题在于课程是如何创建的。

原始类看起来像:

公共类OrderListResponseBody {

public PageInfo PageInfo { get; set; } 
    public string RequestID { get; set; } 
    public string RequestDate { get; set; } 
    public List<OrderInfoListResponse> OrderInfoList { get; set; } 
} 

新类的样子:

public class OrderListResponseBody 
{ 

    public PageInfo PageInfo { get; set; } 
    public string RequestID { get; set; } 
    public string RequestDate { get; set; } 
    public List<OrderInfo> OrderInfoList { get; set; } <!-- notice the change 
}