我将尽力使这篇文章简短而简洁。如果我需要进行一些编辑以添加代码,我会提前道歉。
问题
我有一个能够正确序列化为 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 文件中的第一个响应,后续响应不会反序列化并被跳过。
还有其他想法吗?任何人?