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

ASP.NET Core中如何将Dictionary值存入Session?遇类型转换报错

在ASP.NET Core中存储Dictionary到Session的解决方法

错误原因

HttpContext.Session.SetString方法仅支持存储字符串类型数据,你直接传入Dictionary<string, bool>类型对象,自然会触发类型转换错误。

解决方案

方法一:用内置的System.Text.Json序列化

把Dictionary序列化为JSON字符串后存入Session,读取时再反序列化回来:

修改存储代码:

// 将Dictionary序列化为JSON字符串
var roleJson = System.Text.Json.JsonSerializer.Serialize(dicRole);
// 存入Session
HttpContext.Session.SetString("Role", roleJson);

读取Session中的数据:

// 获取Session里的JSON字符串
var roleJson = HttpContext.Session.GetString("Role");
// 反序列化为Dictionary
if (!string.IsNullOrEmpty(roleJson))
{
    var dicRole = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, bool>>(roleJson);
    // 后续使用dicRole
}

方法二:用Newtonsoft.Json(Json.NET)序列化

如果你的项目已经引用了Newtonsoft.Json包,也可以用它来处理:

存储代码:

var roleJson = Newtonsoft.Json.JsonConvert.SerializeObject(dicRole);
HttpContext.Session.SetString("Role", roleJson);

读取代码:

var roleJson = HttpContext.Session.GetString("Role");
if (!string.IsNullOrEmpty(roleJson))
{
    var dicRole = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, bool>>(roleJson);
    // 后续使用dicRole
}

优化技巧

如果需要频繁操作复杂类型的Session存储,可以封装一个扩展方法简化流程:

public static class SessionExtensions
{
    public static void Set<T>(this ISession session, string key, T value)
    {
        session.SetString(key, System.Text.Json.JsonSerializer.Serialize(value));
    }

    public static T? Get<T>(this ISession session, string key)
    {
        var value = session.GetString(key);
        return value == null ? default : System.Text.Json.JsonSerializer.Deserialize<T>(value);
    }
}

之后存储和读取就可以直接用:

// 存储
HttpContext.Session.Set("Role", dicRole);

// 读取
var dicRole = HttpContext.Session.Get<Dictionary<string, bool>>("Role");

内容的提问来源于stack exchange,提问作者Ratchanon Volty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:30:49