You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中Redis存储会话跳转时序列化错误问题求助

针对Redis Session序列化/反序列化问题的解决方案

首先先看你遇到的错误截图:
Serialization and Deserialization Error from redis

结合你描述的情况——已经给Session相关类加了序列化,但非aspx.cs里的类存Session有问题,Redirect时报错,设throwOnError="false"后Session读不了还没法存新数据——我给你整理几个实用的排查和解决方向:

  • 先确认非aspx.cs类的序列化完整性
    别只看类本身加了[Serializable]特性,得检查:

    • 类里所有嵌套的自定义对象、属性类型也都加了[Serializable](如果用的是默认的BinaryFormatter);要是用DataContract序列化,就得给类加[DataContract],需要序列化的成员加[DataMember]。
    • 有没有包含无法序列化的类型?比如FileStream、未标记序列化的委托、或者一些第三方库的非序列化对象,这些都会导致序列化失败。
    • 有没有不小心加了[NonSerialized]的成员,但其实这个成员是需要存在Session里的?
  • 修复Response.Redirect导致的Session写入中断
    Response.Redirect默认的第二个参数是true,会直接终止当前请求,这时候Session的序列化写入操作可能还没完成就被打断了,进而引发错误。你可以改成:

    Response.Redirect("你的目标页面路径", false);
    Context.ApplicationInstance.CompleteRequest();
    

    这样不会强制终止请求,能让Session的写入操作正常完成,同时用CompleteRequest()正确结束请求流程。

  • 别用throwOnError="false"掩盖问题
    这个配置只是把错误藏起来,但底层的序列化失败并没有解决,反而会导致Session数据损坏,所以后续连正常的Session都存不了。建议打开应用日志和Redis日志,找到具体的序列化错误信息——比如到底是哪个类的哪个成员序列化失败,这样才能精准修复。

  • 检查Redis Session存储的序列化器配置
    如果用的是StackExchange.Redis这类库,默认的序列化器对某些复杂自定义类型支持有限。可以换成Json.NET(Newtonsoft.Json)的序列化方案,比如自己实现一个ISessionStateSerializer,或者用现成的扩展包来替换默认序列化器,这样对自定义类型的兼容性会好很多。

  • 避免存储匿名类型或动态生成的类型
    如果非aspx.cs里的类是动态生成的,或者你存了匿名对象到Session里,这类类型默认是无法序列化的,一定要换成明确标记了序列化特性的实体类。

内容的提问来源于stack exchange,提问作者Kumar Shubham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:15:13