如何将字符串从 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
在 .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