【问题标题】:Serialize ASPX page?序列化 ASPX 页面?
【发布时间】: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;
    // ...
}

这根本没有帮助!

所以我想知道是否可以序列化 ASPX 页面?这不知道这是否有意义。我怀疑!

谢谢...

【问题讨论】:

  • 你为什么要把你的页面类存储在一个会话中?有些东西听起来不对。
  • 看起来您已经在会话中存储了该页面的一个实例。在你的解决方案中快速搜索Session,看看你是否能找到罪魁祸首。
  • 我怀疑 Session 状态的对象之一有对页面的引用。
  • 谢谢大家。另外,我看不到对象应该有引用的任何地方.. 呃!

标签: c# asp.net session serialization


【解决方案1】:

我找到了答案。你们是对的:我的一个对象引用了该页面。

我有一个对象 Player,它有一个事件列表。其中一个事件以当前页面为目标,这导致了问题。

我为事件赋予了以下不可序列化的属性:

[field: NonSerialized]

然后一切正常。他们从此过上了幸福的生活!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多