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

如何在TempData中存储对象?重定向时遇序列化异常求助

解决TempData存储对象数组的序列化异常问题

这个序列化异常我太熟了!本质问题是TempData默认的存储机制(不管是Session还是Cookie)都要求存入的对象必须支持序列化,而你的obj类没做这个处理,所以重定向的时候没法把对象数组持久化传过去。给你两个靠谱的解决方案:

方案一:给实体类添加可序列化标记

如果你的项目允许修改实体类,最简单的方式是给obj类加上[Serializable]特性——这相当于告诉.NET框架:这个类的实例可以被序列化存储。注意如果obj类里包含其他自定义对象类型的属性,那些类也需要加上这个标记哦。

示例代码:

using System;

[Serializable]
public class obj
{
    // 你的类属性示例
    public int MovieId { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
    // 其他属性...
}

加完标记后,你原来的代码就可以正常工作了:

// 存数据
TempData["something"] = objectarray;

// 取数据
obj[] foundmoviesfromredirect = (obj[])TempData["something"];

方案二:将对象序列化为JSON字符串存储(更推荐)

如果不想修改实体类,或者担心默认二进制序列化的安全问题(.NET Core 3.0+默认禁用了BinaryFormatter),可以把对象数组序列化为JSON字符串存到TempData里,取的时候再反序列化回来。这种方式更灵活,也更安全。

用.NET内置的System.Text.Json:

using System.Text.Json;

// 存储对象数组
TempData["something"] = JsonSerializer.Serialize(objectarray);

// 读取并反序列化
var jsonString = TempData["something"] as string;
obj[] foundmoviesfromredirect = JsonSerializer.Deserialize<obj[]>(jsonString);

用Newtonsoft.Json(很多项目的首选):

如果你项目里已经引用了Newtonsoft.Json,可以用这个:

using Newtonsoft.Json;

// 存储对象数组
TempData["something"] = JsonConvert.SerializeObject(objectarray);

// 读取并反序列化
var jsonString = TempData["something"] as string;
obj[] foundmoviesfromredirect = JsonConvert.DeserializeObject<obj[]>(jsonString);

额外注意事项

  • TempData的数据默认是一次性读取的,读取后就会被自动删除。如果需要多次使用,可以用TempData.Peek("something")查看数据不删除,或者TempData.Keep("something")保留数据。
  • 如果你的对象数组体积很大,不建议用TempData传递——毕竟TempData是基于Session或Cookie的,数据太大会影响请求性能。这种情况建议用数据库、分布式缓存(比如Redis)做中间存储。

内容的提问来源于stack exchange,提问作者Arnar Freyr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:59