1

Camarades,XML sérialiser et désérialiser la structure XML de problème

J'ai le problème suivant. Capture une liste Struct, Sérialiser (W3C valide) et envoyer à un WebService. Dans le WebService que je reçois, je transforme en une chaîne, valide par le W3C, puis en Deserializer, mais quand j'essaie de l'exécuter, il se produit toujours une erreur, en disant que certains objets n'étaient pas fermés.

Une aide?

code envoyé:

#region ListToXML 
    private XmlDocument ListToXMLDocument(object __Lista) 
    { 
     XmlDocument _ListToXMLDocument = new XmlDocument(); 

     try 
     { 
      XmlDocument _XMLDoc  = new XmlDocument(); 
      MemoryStream _StreamMem = new MemoryStream(); 
      XmlSerializer _XMLSerial = new XmlSerializer(__Lista.GetType()); 

      StreamWriter _StreamWriter = new StreamWriter(_StreamMem, Encoding.UTF8); 
      _XMLSerial.Serialize(_StreamWriter, __Lista); 

      _StreamMem.Position = 0; 
      _XMLDoc.Load(_StreamMem); 
      if (_XMLDoc.ChildNodes.Count > 0) 
       _ListToXMLDocument = _XMLDoc; 
     } 
     catch (Exception __Excp) 
     { 
      new uException(__Excp).GerarLogErro(CtNomeBiblioteca); 
     } 

     return _ListToXMLDocument; 
    } 
    #endregion 

code de réception:

#region XMLDocumentToTypedList 
    private List<T> XMLDocumentToTypedList<T>(string __XMLDocument) 
    { 
     List<T> _XMLDocumentToTypedList = new List<T>(); 

     try 
     { 
      XmlSerializer _XMLSerial = new XmlSerializer(typeof(List<T>)); 
      MemoryStream _MemStream = new MemoryStream(); 

      StreamWriter _StreamWriter = new StreamWriter(_MemStream, Encoding.UTF8); 
      _StreamWriter.Write(__XMLDocument); 

      _MemStream.Position = 0; 
      _XMLDocumentToTypedList = (List<T>)_XMLSerial.Deserialize(_MemStream); 
      return _XMLDocumentToTypedList; 
     } 
     catch (Exception _Ex) 
     { 
      new uException(_Ex).GerarLogErro(CtNomeBiblioteca); 
      throw _Ex; 
     } 
    } 
    #endregion 
+0

Si vous appelez ces méthodes ensemble dans l'ordre, fonctionnent-elles? (C'est-à-dire, êtes-vous positif que ces deux methoods tiennent le problème, et pas l'appel de service Web?) –

+0

Merci mon pote, mais j'ai réussi à résoudre le problème. Merci pour l'aide. –

Répondre

0

Après beaucoup d'efforts, et d'examiner un certain code de l'Internet, j'ai réussi à résoudre le problème. Je ne sais pas quelle raison, cependant, sache que cette façon fonctionne. Ci-dessous le code.

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(__XMLDocument); 

StringWriter stringWriter = new StringWriter(); 
XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter); 
xmlDoc.WriteTo(xmlWriter); 

XmlSerializer _XMLSerial = new XmlSerializer(typeof(List<tinfCte>)); 
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(stringWriter.ToString())); 

stream.Position = 0; 
_XMLDocumentToTInfCTeList = (List<tinfCte>)_XMLSerial.Deserialize(stream); 
return _XMLDocumentToTInfCTeList; 
Questions connexes