我有一个 XML 文档,我想将其存储在 ViewState 中,这样在每次回发时我不需要再次从其物理路径加载它。我也不想将其存储在 SessionState 中。
当我尝试在 ViewState 中插入它时,出现错误:
异常详细信息:System.Runtime.Serialization.SerializationException:程序集“System.Xml,版本=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中的类型“System.Xml.XmlDocument”未标记为可序列化。
我的属性(property)是这样的:
private XmlDocument MyDocument {
get
{
object viwObj = ViewState["MyDocument"];
if (viwObj != null)
return (XmlDocument)viwObj;
XmlDocument xmlDoc = GetMyDocument();
ViewState["MyDocument"] = xmlDoc;
return xmlDoc;
}
}
如何使 xml 文档可序列化?
谢谢
最佳答案
您可以将 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() 方法您的用户控件/页面,并在其中添加序列化/反序列化逻辑。
关于asp.net - 我可以在 ViewState 中存储 xmlDocument 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951847/