我有一个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文档序列化?
感谢
答案 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中。我希望这是一个相对较小的文件?