如何对ISession类型表达式使用[]索引及将Session值转换为BusinessCustomer对象
你的转换失败本质是HttpContext.Session.GetString("User")返回的是字符串类型,和BusinessCustomer不存在继承或隐式转换关系,as操作符自然无法完成转换。你提到的先序列化再填充的思路是可行的,还有更简洁、复用性更高的实现方式:
最优方案:封装Session泛型扩展方法
这是处理Session存储复杂类型的通用实现,一次封装全局可用,无需每次手动处理序列化逻辑。
首先编写静态扩展类:
using Microsoft.AspNetCore.Http; using System.Text.Json; public static class SessionExtensions { // 向Session存储任意类型对象 public static void SetObject<T>(this ISession session, string key, T value) { session.SetString(key, JsonSerializer.Serialize(value)); } // 从Session读取指定类型对象 public static T GetObject<T>(this ISession session, string key) { var jsonValue = session.GetString(key); return jsonValue == null ? default : JsonSerializer.Deserialize<T>(jsonValue); } }
使用方法:
- 存用户信息到Session时调用:
HttpContext.Session.SetObject("User", 你的BusinessCustomer对象); - 取用户信息时直接调用:
var user = HttpContext.Session.GetObject<BusinessCustomer>("User");
临时快速实现
如果不需要复用,也可以直接手动反序列化:
var userJson = HttpContext.Session.GetString("User"); BusinessCustomer user = null; if (!string.IsNullOrEmpty(userJson)) { user = JsonSerializer.Deserialize<BusinessCustomer>(userJson); }
补充说明
- 如果你项目中用的是Newtonsoft.Json,把上述代码中的
JsonSerializer.Serialize替换为JsonConvert.SerializeObject,JsonSerializer.Deserialize替换为JsonConvert.DeserializeObject<BusinessCustomer>()即可。 - 如果Session中存储的用户结构和
BusinessCustomer字段不匹配,无需手动逐个赋值,可以引入AutoMapper做类型映射,配置好映射规则后一行代码即可完成字段转换。
内容的提问来源于stack exchange,提问作者harili
相关产品推荐
相关产品推荐

