2009-12-23 151 views
3

我有一個XML文檔,我想將它存儲在ViewState中,所以在每次回發時,我不需要再次從它的物理路徑加載它。我不想將它存儲在SessionState中。我可以在ViewState中存儲xmlDocument對象嗎?

當我試圖srote它在ViewState中我得到一個錯誤:

異常詳細信息:System.Runtime.Serialization.SerializationException:在大會「的System.Xml類型 'System.Xml.XmlDocument',版本爲2.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未標記爲可序列化。

我的財產是這樣的:

private XmlDocument MyDocument  { 
     get 
     { 
      object viwObj = ViewState["MyDocument"]; 
      if (viwObj != null) 
       return (XmlDocument)viwObj; 

      XmlDocument xmlDoc = GetMyDocument(); 
      ViewState["MyDocument"] = xmlDoc; 

      return xmlDoc; 
     } 
    } 

我怎樣才能使一個XML文檔序列化呢?

感謝

回答

3

您可以將您的XmlDocument序列化爲XML字符串並將該字符串保存在ViewState中。

連載:

using (var sw = new StringWriter()) 
using (var xw = new XmlTextWriter(sw)) 
{ 
    xmlDoc.WriteTo(xw); 
} 

ViewState["MyDocument"] = sw.ToString() 

反序列化:

var xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml((string) ViewState["MyDocument"]); 

這種類型的系列化並沒有真正融入一個get/set屬性,那麼你很可能要重寫SaveViewState()LoadViewState()您的用戶控制/頁面的方法,並在這些內添加序列化/反序列化邏輯。

+0

謝謝!這真的是非常有用的信息JørnSchou-Rode! – pencilCake 2009-12-23 10:31:59

0

你總是可以只轉換XML文檔到它的字符串表示和保存/加載到這視圖狀態。我希望這是一個相對較小的文件?

相關問題