2017-08-10 1 views
0

Ich habe eine folgende SOAP-Antwort:Als mein XML deserialisieren, ich erhalte eine Fehlermeldung, dass XML ungültig ist

<?xml version="1.0"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <insertResponse xmlns="order"> 
     <out xmlns="order"> 
      <actionType xmlns="http://serverurl.com">insert</actionType> 
      <orderNumber xmlns="http://serverurl.com">54556100766</orderNumber> 
      <errorMsg xmlns="http://serverurl.com"> 
      <ns1:Error xmlns:ns1="http://exception.serverurl.com"> 
       <code xmlns="http://exception.serverurl.com">12345</code> 
       <message xmlns="http://exception.serverurl.com">Unable to acquire ID. Record does not exist.</message> 
       </ns1:Error> 
      </errorMsg> 
      <orderID xmlns="http://serverurl.com">0000005555</orderID> 
      <region xmlns="http://serverurl.com">Region11</region> 
      <successMsg xmlns="http://serverurl.com" xsi:nil="true"/> 
     </out> 
    </insertResponse> 
    </soap:Body> 
</soap:Envelope> 

Ich möchte es in eine folgende Klasse deserialisieren:

public class insertResponse 
{ 
    public string successMsg { get; set; } 
    public errorMsg error { get; set ;} 
} 

public class errorMsg 
{ 
    List<Error> errorList { get; set; } 
} 

public class Error 
{ 
    public string code { get; set; } 
    public string message { get; set; } 
} 

I habe ein Verfahren, das zu tun, nur versucht:

private T DeserializeSoapResponse<T>(string soapResponse) 
{ 
    System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument(); 
    xmlDocument.LoadXml(soapResponse); 

    var soapBody = xmlDocument.GetElementsByTagName("soap:Body")[0]; 
    string innerObject = soapBody.InnerXml; 


    XmlSerializer deserializer = new XmlSerializer(typeof(T)); 

    using(StringReader reader = new StringReader(innerObject)) 
    { 
     return (T)deserializer.Deserialize(reader); 
    } 
} 

Wenn es ausgeführt wird, bin immer ich die Ausnahme mit der Meldung „es ist ein Fehler in XML-d Okument (1,2) "auf der Linie mit der return Aussage.

Was fehlt mir? Und wenn das der richtige Ansatz für das Problem ist?

+0

Bitte korrekte XML-Datei. diese "Zeichen" gehören nicht hierher. Oder wenn sie in Ihren Daten sind, sind sie das Problem. –

+2

Und auch Ihre Start-/End-Tags stimmen nicht überein. "OrderNumber"/"customerNumber" usw. –

+1

Es gibt einige Probleme. Zuerst ignorierst du alle Namespaces in deinen Zielklassen. Und zweitens ignorierst du einige der Elemente - wie "out". Versuchen Sie 'Edit |> Inhalte einfügen |> XML als Klassen einfügen 'in Visual Studio. –

Antwort

0
<orderID xmlns="http://serverurl.com">0000005555</orderID> <region xmlns="http://serverurl.com">Region11</region> 

Ihr orderID schließendes Tag fehlt.

Verwandte Themen