序列化 ASPX 页面?

Posted

技术标签:

【中文标题】序列化 ASPX 页面?【英文标题】:Serialize ASPX page? 【发布时间】:2011-05-31 18:55:18 【问题描述】:

我需要使用外部会话状态服务器,这需要对我的所有会话进行序列化。我一直在尝试使用[Serializeable()] 属性使我存储在会话中的所有类都可序列化。

但是,我不断收到以下错误:

无法序列化会话状态。

StateServerSQLServer 模式下,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 序列化和反序列化的问题?

带有 Razor 和 ASPX 引擎的 JavaScriptSerializer

什么是序列化?

C# 中的 MFC 对象序列化

查看linux显卡序列