我有一个XML文档,我想将它存储在会话中,所以在每个帖子上我都不需要再从它的物理路径加载它。我们正在使用状态服务器。
当我尝试将它存储在Session I中时出现错误:
异常详细信息:System.Runtime.Serialization.SerializationException:在Assembly'System.Xml,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中键入'System.Xml.XmlDocument'未标记为可序列化。< / p>
我的代码是这样的:
string resumeSection = string.Empty;
resumeSection = resume.GetXMLSection(1)
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(resumeSection);
Session["USERXML"] = xmloc;
如何进行seralization?
因为我低于错误 无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。
答案 0 :(得分:0)
我知道这是2岁,但我自己也遇到了同样的问题,因为我找到了解决方案,我想与你分享。 Devjosh是对的,我们不应该在会话中存储复杂的对象,但有时候非常有用,所以很高兴知道有一个解决方案。
我注意到如果您将对象存储为xml / dataset / class,则可能会遇到此错误。我试图将它存储为通用对象,似乎工作。在存储数据集的相同代码上,我有错误,通过存储在类似的通用对象中,工作正常。
这是一个简化的例子:
public static void InsertSessionObject(string item, object obj)
{
HttpContext.Current.Session.Add(item, obj);
}
public static object GetSessionObject(string item)
{
return HttpContext.Current.Session[item];
}
public static void RemoveSessionObject(string item)
{
HttpContext.Current.Session.Remove(item);
}
DataSet lastResults = GetDatasetResults();
InsertSessionObject("myDataset", lastResults);
lastResults = (DataSet)GetSessionObject("myDataset");
RemoveSessionObject("myDataset");