2010-07-27 33 views
2

產生沒有根元素錯誤我有一個類,像這樣:XMLDocument.load方法(XML)從XmlSerializer的序列化代碼

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

    ... 
    <snip> 

    //end properties. 
} 

這個類包含一個靜態方法來創建一個XmlDocument實例傳遞到BizTalk服務器。像這樣:

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

GetMyMessageType創建MyMessageType的一個實例,然後調用下面的代碼:

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

當我嘗試運行此代碼,我收到一個XmlException「根元素是缺少」。當我修改代碼輸出到測試文件時,我得到一個格式良好的Xml文檔。任何人都可以告訴我爲什麼我可以輸出到一個文件,但不是作爲一個XmlDocument?

回答

6

你還沒有倒帶MemoryStream,你甚至不知道作者有刷新流。我將有更多的東西一樣:

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

事實上,我甚至可能會序列化到一個StringWriter代替;節省一些編碼/解碼開銷:

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

好吧......現在我覺得自己像一個白癡。我一整天都在看。 – AllenG 2010-07-27 21:01:58

+0

@AllenG - 另請參閱更新'StringWriter' – 2010-07-27 21:02:45