2010-07-27 5 views
2

j'ai une classe comme ceci:XmlDocument.Load (xml) génère pas de racine erreur Élément de XmlSerializer Code sérialisé

[XmlRoot"MyMessageType")] 
public class MyMessageType : BaseMessageType 
{ 
    [XmlElement("MessageId")] 
    //Property for MessageId 

    ... 
    <snip> 

    //end properties. 
} 

Cette classe contient une méthode statique pour créer une instance XmlDocument pour passer à un serveur BizTalk. Comme si:

public static XmlDocument GetMyMessageType(string input1, string input2 ...) 

GetMyMessageType crée une instance de MyMessageType, puis appelle le code suivant:

XmlSerializer outSer = new XmlSerializer(instance.GetType()); 
using (MemoryStream mem = new MemoryStream()) 
using (XmlWriter _xWrite = XmlWriter.Create(mem)) 
{ 
    outSer.Serialize(_xWrite, instance); 
    XmlDocument outDoc = new XmlDocument(); 
    outDoc.Load(XmlReader.Create(mem)); 
    return outDoc; 
} 

Lorsque je tente d'exécuter ce code, je reçois un XmlException "L'élément racine est manquant." Lorsque je modifie le code pour le sortir dans un fichier de test, j'obtiens un document XML bien formé. Quelqu'un peut-il me dire pourquoi je serais capable de sortir dans un fichier, mais pas en tant que XmlDocument?

Répondre

6

Vous n'avez pas rembobiné le MemoryStream, et vous ne savez même pas que l'auteur a vidé le flux. J'aurais quelque chose comme:

using (MemoryStream mem = new MemoryStream()) { 
    outSer.Serialize(mem, instance); 
    mem.Position = 0; 
    XmlDocument outDoc = new XmlDocument(); 
    outDoc.Load(mem); 
    return outDoc; 
} 

En fait, je pourrais même sérialisation à un StringWriter au lieu; sauver quelques frais d'encodage/décodage:

string xml; 
using (StringWriter writer = new StringWriter()) { 
    outSer.Serialize(writer, instance); 
    xml = writer.ToString(); 
} 
XmlDocument outDoc = new XmlDocument(); 
outDoc.LoadXml(xml); 
return outDoc; 
+0

Ok ... maintenant je me sens comme un idiot. J'ai regardé ça toute la journée. – AllenG

+0

@AllenG - voir aussi la mise à jour re 'StringWriter' –