2012-07-31 32 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 
}