如何将字符串从 httpcontet.current.session.getstring 转换为某个给定类型

How to convert string from httpcontet.current.session.getstring to some given type

在 .net 4.8 中,我们像这样使用 HttpContext

HttpContext.Current.Session["Settings"]) as List<UserSettings>

但在.net core 中,它给出了无法将字符串转换为列表的错误。

_accessor.HttpContext.Session.GetString("Settings")) as List<UserSettings>

你为什么不像你已经在这里做的那样先得到字符串: _accessor.HttpContext.Session.GetString("Settings")) 保存到一个变量中,然后初始化一个字符串类型的列表,然后再添加进去?

在 .net Core 中,所有会话数据都必须序列化以启用分布式缓存方案。复杂类型必须由用户使用另一种机制序列化,例如 JSON.

添加以下扩展方法来设置和获取可序列化对象:

public static class SessionExtensions
{
    public static void Set<T>(this ISession session, string key, T value)
    {
        session.SetString(key, JsonConvert.SerializeObject(value));
    }

    public static T Get<T>(this ISession session, string key)
    {
        var value = session.GetString(key);

        return value == null ? default(T) : 
            JsonConvert.DeserializeObject<T>(value);
    }
}

更改您的代码以使用上述扩展方法。

List<Settings> settings = _accessor.HttpContext.Session.Get<List<Settings>>("Settings")

参考:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2