1

我正在从 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 看起来效率很低。有什么办法吗?)谢谢。

4

1 回答 1

2

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

我认为您最好的选择是优化您当前的策略。您是否确保 XMLDocument 在每个请求期间仅重建一次?与构造 XMLDocument 不同,使用 XMLReader 可能更有效,具体取决于 XML 数据的实际使用方式。

于 2009-10-19T17:25:27.360 回答