Десериализация XML: NULL - PullRequest
       41

Десериализация XML: NULL

0 голосов
/ 12 июня 2018

Мой Deserializer выполняется без исключения, но в результате объект получает нулевые значения.Исходный XML ясно показывает значения, которые по какой-то причине не устанавливаются в целевом объекте.Я не могу понять, почему?

Исходный XML:

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>soapenv:Client</faultcode>
<faultstring>Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:).</faultstring>
<detail>
    <axlError>
        <axlcode>-239</axlcode>
        <axlmessage>Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:).</axlmessage>
        <request>addRoutePartition</request>
    </axlError>
</detail>

Класс:

using System.Xml.Serialization;

namespace AXLClassLibrary
{
[XmlRoot(ElementName = "Fault", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Fault
{
    [XmlElement(ElementName = "faultcode")]
    public string Faultcode { get; set; }
    [XmlElement(ElementName = "faultstring")]
    public string Faultstring { get; set; }
    [XmlElement(ElementName = "detail")]
    public Detail Detail { get; set; }
    [XmlAttribute(AttributeName = "soapenv", Namespace = "http://www.w3.org/2000/xmlns/")]
    public string Soapenv { get; set; }
}

[XmlRoot(ElementName = "axlError")]
public class AxlError
{
    [XmlElement(ElementName = "axlcode")]
    public string Axlcode { get; set; }
    [XmlElement(ElementName = "axlmessage")]
    public string Axlmessage { get; set; }
    [XmlElement(ElementName = "request")]
    public string Request { get; set; }
}

[XmlRoot(ElementName = "detail")]
public class Detail
{
    [XmlElement(ElementName = "axlError")]
    public AxlError AxlError { get; set; }
}
}

Код десериализатора:

                var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
                XDocument xd = XDocument.Parse(resp);
                XNamespace ns1 = "http://schemas.xmlsoap.org/soap/envelope/";
                XNode faultXML = xd.Descendants(ns1 + "Fault").DescendantNodesAndSelf().First();
                XmlRootAttribute xRoot = new XmlRootAttribute();
                xRoot.ElementName = "Fault";
                xRoot.Namespace = "http://schemas.xmlsoap.org/soap/envelope/";
                xRoot.IsNullable = false;
                resp = faultXML.ToString();


                Fault currentFault;
                XmlSerializer serializer = new XmlSerializer(typeof(Fault), xRoot);
                using (TextReader readFault = new StringReader(resp))
                {
                    currentFault = (Fault)serializer.Deserialize(readFault);
                }

Resulting Object Inspection

...