序列化 ASPX 页面?
Posted
技术标签:
【中文标题】序列化 ASPX 页面?【英文标题】:Serialize ASPX page? 【发布时间】:2011-05-31 18:55:18 【问题描述】:我需要使用外部会话状态服务器,这需要对我的所有会话进行序列化。我一直在尝试使用[Serializeable()]
属性使我存储在会话中的所有类都可序列化。
但是,我不断收到以下错误:
无法序列化会话状态。
在StateServer
和SQLServer
模式下,ASP.NET 将序列化会话状态对象,因此不允许使用不可序列化对象或MarshalByRef
对象。如果自定义会话状态存储在“Custom
”模式下完成类似的序列化,则同样的限制也适用。
更有趣的是堆栈跟踪:
[SerializationException: Type 'ASP.useroverview_aspx' in Assembly 'App_Web_pwonykbc, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 未标记为可序列化。]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型) +9452985 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型类型,StreamingContext 上下文)+247 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +160 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器,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;
// ...
这根本没有帮助!
所以我想知道是否可以这不知道这是否有意义。我怀疑!
谢谢...
【问题讨论】:
你为什么要把你的页面类存储在一个会话中?有些东西听起来不对。 看起来您已经在会话中存储了该页面的一个实例。在你的解决方案中快速搜索Session
,看看你是否能找到罪魁祸首。
我怀疑 Session 状态的对象之一有对页面的引用。
谢谢大家。另外,我看不到对象应该有引用的任何地方.. 呃!
【参考方案1】:
我找到了答案。你们是对的:我的一个对象引用了该页面。
我有一个对象 Player,它有一个事件列表。其中一个事件以当前页面为目标,这导致了问题。
我为事件赋予了以下不可序列化的属性:
[field: NonSerialized]
然后一切正常。他们从此过上了幸福的生活!
【讨论】:
以上是关于序列化 ASPX 页面?的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net 2.0 页面加载序列和 SqlPagePersister 属性
关于使用XmlSerializer 序列化和反序列化的问题?