2017-08-10 4 views
0

j'avoir une réponse SOAP suivante:Lorsque désérialisation mon XML, je reçois une erreur que XML est invalide

<?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> 

Je veux désérialiser dans une classe suivante:

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 ont une méthode d'essayer de faire exactement cela:

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); 
    } 
} 

Lors de l'exécution, je reçois l'exception avec le message « il y a une erreur dans XML d ocument (1,2) "sur la ligne avec l'instruction return.

Qu'est-ce qui me manque? Et si c'est la bonne approche du problème?

+0

Veuillez poster un code XML approprié. ces signes '-' n'appartiennent pas ici. Ou quand ils sont dans vos données, ils sont le problème. –

+2

Et aussi vos balises start/end ne correspondent pas. 'orderNumber'/'customerNumber' etc. –

+1

Il y a peu de problèmes. D'abord, vous ignorez tous les espaces de noms dans vos classes cibles. Et en second lieu, vous ignorez certains des éléments - comme 'out'. Essayez 'Edition |> Collage spécial |> Coller XML en tant que classes dans Visual Studio. –

Répondre

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

Une étiquette de fermeture de commandeID est manquante.