3

我有一个 XML 文档,我想将它存储在 ViewState 中,因此在每次回发时我不需要再次从其物理路径加载它。我也不想将它存储在 SessionState 中。

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

异常详细信息:System.Runtime.Serialization.SerializationException:在程序集“System.Xml,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中键入“System.Xml.XmlDocument”未标记为可序列化。

我的财产是这样的:

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

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

            return xmlDoc;
        }
    }

那么如何使 xml 文档可序列化呢?

谢谢

4

2 回答 2

4

您可以将您序列化为XmlDocumentXML 字符串并将该字符串保存在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()方法,并在其中添加序列化/反序列化逻辑。

于 2009-12-23T10:14:22.847 回答
0

您总是可以将您的 XML 文档转换为它的字符串表示形式并将其保存/加载到视图状态中。我希望这是一个比较小的文件?

于 2009-12-23T10:13:40.817 回答