【问题标题】:Serialize ASP.NET Control collection序列化 ASP.NET 控件集合
【发布时间】:2008-12-30 21:17:59
【问题描述】:

我的任务是将现有 ASP.NET 站点从使用 InProc 会话管理转换为使用 ASP.NET 状态服务器。

当然,这意味着存储在 Session 中的任何内容都必须是可序列化的。

应用程序中最复杂的页面之一当前是将 ASP.NET 控件集合存储到 Session。这很失败,因为控件无法自动序列化。

没有完全重写页面的工作方式以防止需要将控件集合存储在 Session 中,有没有人有使集合可序列化的技巧/解决方案?

【问题讨论】:

    标签: asp.net serialization


    【解决方案1】:

    重写页面。以后你会感谢自己的。如果最初的“程序员”(我在这里松散地使用该术语)认为在会话中存储控制层次结构是一个好主意,那么肯定会有其他问题。

    【讨论】:

    • 感谢您的建议,我也意识到了这一点,上周大部分时间都在重做页面,因此根本不需要将控件存储在会话中。重写似乎运作良好。
    • 很高兴听到这个消息。有时你只需要咬紧牙关,用一把巨大的砍刀穿过杂草丛生的灌木丛,直到一切正常。 :-)
    【解决方案2】:

    不要将控件集合存储在会话状态中。 Tess 有很多关于这方面的文章,例如this one

    【讨论】:

      【解决方案3】:

      想到的第一个答案是进行部分重写(我认为这不会是一个简单的答案)。如果是少数控件类型,请编写您自己的控件,从这些控件继承并实现 ISerializable。然后,使用搜索和替换,将页面的控件替换为您的版本。如果您使用大量控件类型,您可能会花费更多时间来扩展标准类型而不是重构页面。

      当您初始化控件时,工作将在控件的序列化和反序列化中进行,以确保您正在捕获您需要的内容(TextBox 值、IsSelected 等)。

      这显然是一个 hack,但如果您的优先级确实不是重写该特定页面的功能,那么这可能对您有用。然后,当然,您需要将此解决方案添加到您的应用程序产生的“技术债务”中,以确保在某些时候它总是在某人的雷达上进行重构。

      【讨论】:

        猜你喜欢
        • 2010-12-07
        • 2011-01-14
        • 2010-12-16
        • 2023-03-03
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        相关资源
        最近更新 更多