1

如您所知,在 ASP.NET 中,您可以使用以下三种模式之一存储会话数据:

  • 进程内
  • 会话状态
  • SQL 服务器

对于 InProc 模式,您可以存储任何类型的数据对象,即使它不可序列化。但是,在会话状态和 SQL Server 模式下,您只能存储序列化数据。

在我的项目中,我有一个现成的门户,它使用“InProc”模式来存储其会话。由于一些可扩展性和故障处理问题,我需要使用会话状态。

此门户在会话上下文中内部存储未序列化对象的问题(即存储的对象不实现 ISerializable 接口)。我无法访问他们的代码。是否有任何解决方法,以便我能够将会话对象存储在 State Server 中而无需更改其代码。如果这有任何帮助,我仍然可以访问他们的 web.config 文件。

4

2 回答 2

1

AFAIK,简单的答案是否定的。如果您不介意更改代码,您可以在实际对象和您的对象之间注入一个包装器对象,并让您的包装器处理序列化包装的对象(本质上作为序列化代理) - 但到那时它几乎更容易只需重新编写代码...

它们是什么类型的物体?通常,会话状态的对象是简单的数据类,所以序列化它们不应该有太多问题吗?

于 2008-10-28T12:43:11.767 回答
1

序列化创建对象的表示,可以存储和读取以重新创建对象的状态。

如果一个对象只包含值类型,那么您可能不需要实现 ISerializable,而只需要 [Serializable] 属性。

为了使这个回答对手头的问题更有帮助或更直接:

你不能序列化一个没有以某种方式被定义为可序列化的对象。任何其他重新创建对象的通用方式都可能导致对象的状态与其“序列化”之前的状态不同。

正如 Marc 所提到的,您可以通过创建自己的可序列化“包装器”来做到这一点,但是您需要非常熟悉相关对象,并且该对象需要具有允许在其中重新创建它的方法这样的方式。

于 2008-10-28T12:44:28.270 回答