asp.net - 我可以在 ViewState 中存储 xmlDocument 对象吗?

标签 asp.net viewstate xmldocument serializable storage

我有一个 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/

相关文章:

asp.net - 我*必须*在 MVC3 中覆盖多少 MembershipProvider

c# - Web 自定义控件数据存储位置

asp.net - 为什么即使我将 EnableViewState 设置为 false 也会呈现 __VIEWSTATE 隐藏字段

c# - 如何在 C# 中更改 XML 文件的属性值?

c# - 如何用新值更新 XML 节点?

c# - System.Xml.XmlException - 根元素丢失

c# - session 变量由于某种原因丢失

c# - 如何使文本在网络表单上居中?

asp.net - 将 DropDownList 绑定(bind)到没有数据源的详细信息 View

c# - ListView + DataPager 控件不维护状态