【问题标题】:deserializing XML results in no data for any sequence elements反序列化 XML 不会导致任何序列元素的数据
【发布时间】:2012-07-31 20:24:12
【问题描述】:

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

问题

我有一个可以正确序列化为 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 显示所有字段都设置后设置断点,列表对象除外。

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

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

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

【问题讨论】:

  • 刚刚编辑了我的答案...

标签: c# deserialization xml-deserialization


【解决方案1】:

问题在于类是如何创建的。

原来的类是这样的:

公共类 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
}

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多