我可以在Session中存储xml Document对象吗?如何进行序列化?

时间:2012-01-19 06:58:08

标签: session xml-serialization serializable stateserver

我有一个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对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。

1 个答案:

答案 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");