2009-12-23 70 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文档到它的字符串表示和保存/加载到这视图状态。我希望这是一个相对较小的文件?

相关问题