我可以在ViewState中存储xmlDocument对象吗?

时间:2009-12-23 10:06:49

标签: asp.net viewstate xmldocument serializable storage

我有一个XML文档,我想将它存储在ViewState中,所以在每个帖子上我不需要再次从它的物理路径加载它。我也不想将它存储在SessionState中。

当我试图在ViewState中写它时,我收到一个错误:

异常详细信息:System.Runtime.Serialization.SerializationException:在Assembly'System.Xml,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中键入'System.Xml.XmlDocument'未标记为可序列化。< / p>

我的财产是这样的:

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

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

            return xmlDoc;
        }
    }

如何将xml文档序列化?

感谢

2 个答案:

答案 0 :(得分:4)

您可以将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()方法,并添加序列化这些中的/反序列化逻辑。

答案 1 :(得分:0)

您可以随时将XML文档转换为字符串表示形式,然后将其保存/加载到viewstate中。我希望这是一个相对较小的文件?