【问题标题】:How to convert string from httpcontet.current.session.getstring to some given type如何将字符串从 httpcontet.current.session.getstring 转换为某个给定类型
【发布时间】:2021-05-15 05:43:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# asp.net session .net-core httpcontext


    【解决方案1】:

    在 .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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已经尝试过了,但问题仍然存在。
      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2022-08-18
      • 2013-11-27
      • 2019-10-09
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多