有没有办法在会话中存储动态变量?
我试过这种方式
public dynamic MSG
{
get
{
var obj = _context.HttpContext.Session.GetString("MSG");
return string.IsNullOrEmpty(obj) ? null : JsonConvert.DeserializeObject<dynamic>(obj);
}
set
{
if (value == null) throw new ArgumentNullException(nameof(value));
_context.HttpContext.Session.SetString("MSG", JsonConvert.SerializeObject(value));
}
}
但是出现编译错误
严重级代码描述项目文件行抑制状态 错误CS1973'ISession'没有名为'SetString'的适用方法但是 似乎有一个名称的扩展方法。扩展方法 无法动态调度。考虑投射动态 参数或调用扩展方法而不使用扩展方法 语法。
答案 0 :(得分:1)
只需执行错误消息即可。要么不使用无法动态调度的扩展方法,要么显式使用扩展方法,要么只将动态值转换为适当的类型:
_context.HttpContext.Session.SetString("MSG", (string) JsonConvert.SerializeObject(value));
答案 1 :(得分:0)
使用以下代码。
_context.HttpContext.Session.SetString("MSG", JsonConvert.SerializeObject(value)ToString());
答案 2 :(得分:0)
尚不支持在扩展方法中使用动态类型。 您应该转换值:
JsonConvert.SerializeObject(value)
做这样的事情应该有效:
_context.HttpContext.Session.SetString("MSG", JsonConvert.SerializeObject(value).ToString());
或者使用其他方法,例如Add
如果存在:
_context.HttpContext.Session.Add("MSG", JsonConvert.SerializeObject(value));
我只是设置了一点测试。 通过让财产结构如此,我没有遇到任何问题:
public dynamic MSG
{
get
{
string obj = HttpContext.Current.Session["MSG"].ToString();
return string.IsNullOrEmpty(obj) ? null : JsonConvert.DeserializeObject(obj);
}
set
{
if (value == null) throw new ArgumentNullException(nameof(value));
HttpContext.Current.Session["MSG"] = JsonConvert.SerializeObject(value);
}
}
但是,_context
是什么类型的?也许这个目标存在一些差异。