使用元素列表(其中某些元素为xsi)反序列化XML:nil =“ true”

时间:2019-03-15 19:28:55

标签: c# .net xml xml-deserialization

当我从第三方反序列化下面的XML时,我的对象始终为空。

XML

<?xml version="1.0"?>
<OrderImport xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Reply i:nil="true">
  </Reply>
  <ReplyStatus i:nil="true">
    <DebugInfo>
    </DebugInfo>
    <PerformanceLogInfo>
    </PerformanceLogInfo>
  </ReplyStatus>
  <Reply>
    <OrderNumber>4063286</OrderNumber>
  </Reply>
  <ReplyStatus>
    <Result>0</Result>
    <Message>
    </Message>
  </ReplyStatus>
</OrderImport>

C#类

[XmlRoot(ElementName = "OrderImport")]
public class OrderImport
{
    [XmlElement(ElementName = "Reply")]
    public List<Reply> Reply { get; set; }
    [XmlElement(ElementName = "ReplyStatus")]
    public List<ReplyStatus> ReplyStatus { get; set; }
    [XmlAttribute(AttributeName = "i", Namespace = "http://www.w3.org/2000/xmlns/")]
    public string I { get; set; }
}

[XmlRoot(ElementName= "Reply")]
public class Reply
{
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
    public string Nil { get; set; }
    [XmlElement(ElementName = "OrderNumber")]
    public string OrderNumber { get; set; }
}

[XmlRoot(ElementName = "ReplyStatus")]
public class ReplyStatus
{
    [XmlElement(ElementName = "DebugInfo")]
    public string DebugInfo { get; set; }
    [XmlElement(ElementName = "PerformanceLogInfo")]
    public string PerformanceLogInfo { get; set; }
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
    public string Nil { get; set; }
    [XmlElement(ElementName = "Result")]
    public string Result { get; set; }
    [XmlElement(ElementName = "Message")]
    public string Message { get; set; }
}

我认为问题与第一次出现的对象Reply和ReplyStatus为空有关。

我正试图反序列化

httpResponseMessage.Content.ReadAsAsync<OrderImport>().Result;

但是,我发现如果我这样反序列化就可以了

stringres = httpResponseMessage.Content.ReadAsStringAsync().Result;
using (var stringreader = new StringReader(stringres))
                {
                    var result = (OrderImport)xmlSerializer.Deserialize(stringreader);

                }

0 个答案:

没有答案