我将尽力保持这篇文章简洁明了。如果我需要进行大量编辑来添加代码,我会提前道歉。
问题
我有一个类,我能够正确地序列化为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数据和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文件中的第一个响应,后续响应不会反序列化并被跳过。
还有其他想法吗?任何人?
答案 0 :(得分: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
}