我处于静坐状态,我需要使用外部会话状态服务器,这需要序列化我的所有会话。我一直试图通过使用[Serializeable()]
属性使我在会话中存储的所有类都可序列化。
但是,我一直收到以下错误:
无法序列化会话状态。
在StateServer
和SQLServer
模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef
对象。如果自定义会话状态存储在“Custom
”模式下完成类似的序列化,则适用相同的限制。
然而,更有趣的是堆栈跟踪:
[SerializationException:在程序集'App_Web_pwonykbc中输入'ASP.useroverview_aspx',Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化。]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)+9452985
System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type,StreamingContext context)+247
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()+160
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj,ISurrogateSelector surrogateSelector,StreamingContext context,SerObjectInfoInit serObjectInfoInit,IFormatterConverter converter,ObjectWriter objectWriter,SerializationBinder binder)+218
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo,NameInfo memberNameInfo,NameInfo typeNameInfo)+388
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph,Header [] inHeaders,__BinaryWriter serWriter,Boolean fCheck)+444
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream,Object graph,Header [] headers,Boolean fCheck)+133
System.Web.Util.AltSerialization.WriteValueToStream(Object value,BinaryWriter writer)+1708
类型ASP.useroverview_aspx
就我所知的ASPX页面而言。我加载的页面是Useroverview.aspx
。但是,我不会尝试将此页面存储在会话中。所以这个错误让我想起了很多。
我尝试在代码隐藏中执行以下操作:
[Serializable()]
public partial class UserOverview : Page
{
private static readonly int TimerInterval = HttpContext.Current.IsDebuggingEnabled ? 2000 : 750;
// ...
}
这根本没有帮助!
所以我想知道是否可以序列化ASPX页面?这不知道这是否有意义。我对此表示怀疑!
...谢谢
答案 0 :(得分:3)
我找到了答案..你们是对的:我的一个对象有一个对页面的引用。
我有一个对象播放器,它有一个事件列表。其中一个事件将当前页面作为目标,从而解决问题。
我为该事件提供了以下非序列化属性:
[field: NonSerialized]
然后一切正常。他们从此过着幸福的生活!