如何保持会话基于XML的对象?

时间:2009-10-19 17:03:50

标签: asp.net xmldocument linq-to-xml

我正在从XML中接收来自Web服务的数据,我正在通过对象使用该数据,并以接收到的XML为基础。因此,有时我需要在会话中的请求之间存储此类特定于用户的对象。我知道XMLDocument无法显式存储(状态服务器)......所以我做了一个糟糕的结构,如:

private string _data;
public XmlDocument Data
{
    get
    {
        XmlDocument res = new XmlDocument();
        if (!string.IsNullOrEmpty(_data))
        {
            res.InnerXml = _data;
            return res;
        }
        return null;
    }
    set { _data = value.InnerXml; }
} 

所以我隐含地存储了xml ...它在开发过程中对我很有用,因为我不确切知道我需要从整个对象中获得什么属性 - 我可以用xpath等在捏合中制作简单的实验属性...

所以这对我来说很舒服,但每次我需要从该类的任何属性中获取一些数据时,从字符串构造xmldocument看起来效率很低。有什么办法吗?)谢谢。

1 个答案:

答案 0 :(得分:2)

如果您需要跨请求存储数据,那么在每个请求期间实际上并没有绕过序列化和反序列化数据 - 只有一个例外。如果您使用进程内会话,则可以存储您想要的任何对象,包括XMLDocument对象,甚至(原谅我甚至提到这一点)打开文件句柄和数据库连接。我不建议您的应用程序依赖于进程内会话,因为它将消除将应用程序放入Web场的可能性,如果有必要的话。

我认为您最好的选择是优化您当前的策略。您是否确保XMLDocument仅在每次请求期间重建一次?您可以使用XMLReader,而不是构建XMLDocument,这取决于实际使用XML数据的方式。