0

我将尽力使这篇文章简短而简洁。如果我需要进行一些编辑以添加代码,我会提前道歉。

问题

我有一个能够正确序列化为 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> 

我能够毫无问题地获得 PageInfo 数据和 RequestID,但我的结果对象显示

OrderInfoList
    OrderInfo count = 0

如果我将响应显示为字符串,我会得到 51 个响应。

问题

为什么我无法反序列化为 OrderInfo?

我试过的

我尝试了以下代码,但我的计数仍然是 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 显示所有字段都设置后设置断点,列表对象除外。

我已经通过在方法开始时将它设置为 null 来实例化我的 orderResp 对象。我还实例化了该类中包含的对象的每个实例,但都没有结果。

如果我从类中删除所有集合(列表、数组等),我可以反序列化 XML 文件中的第一个响应,后续响应不会反序列化并被跳过。

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

4

1 回答 1

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
}
于 2012-08-01T20:04:10.983 回答