2

我们有一个继承自 ProfileBase 的自定义配置文件类。我们希望将此对象弹出到 Session 中,以消除根据请求继续检索它的需要。

我们正在使用 ASP.NET 状态服务器,并且遇到了以下异常:

在程序集“App_Code.nvrow7px, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中键入“ProfileCommon”未标记为可序列化。

将 Serializable 添加到我们的课程并没有帮助。我假设消息中的“ProfileCommon”有点红鲱鱼,因为这不是我们类的名称,但当您将 Profiles 与 Web 项目一起使用时,它是 nmae。

将我们的自定义 Profile 对象转换为可序列化类型以“传输”进出 Session 是唯一的选择吗?

干杯

4

1 回答 1

1

ASP.NET StateServer 使用二进制序列化来存储任何对象图。二进制序列化要求对象图中的每个对象都是可序列化的(包括对象基类型)。[Serializable]因此,如果其类层次结构中的类也没有实现,那么仅将您的自定义配置文件类标记为几乎没有什么作用[Serializable]

既不实现ProfileBase也不ProfileCommon实现[Serializable],如果不将这些数据复制到完全可序列化的类层次结构或将数据转换为另一种格式(例如 XML)并对其进行序列化,就不可能将派生自它们的任何类存储在 StateServer 中。

了解更多信息:

如果模式设置为 StateServer,则存储在会话状态中的对象必须是可序列化的。有关可序列化对象的信息,请参阅 SerializableAttribute 类。

会话状态模式

将 SerializableAttribute 属性应用于一个类型以指示该类型的实例可以被序列化。如果正在序列化的对象图中的任何类型未应用 SerializableAttribute 属性,则公共语言运行库将引发 SerializationException。

可序列化属性

于 2013-07-16T19:09:15.783 回答