gpt4 book ai didi

c# - 如何在 C# 中转换存储在 session 中的字典?

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:09 25 4
gpt4 key购买 nike

在 session 中放置:

HttpContext.Current.Session.Add("_ProjectRights", ProjectRepository.GetProjectRechten(user1.UserId).ToList());

查询:

var data= Db.Users.SingleOrDefault(s => s.UserPk == userId)?.ProjectUser
.Select(se => new { Key = se.primaryKey1.ToString(),
Items = string.Join(",", se.ProjectRight.Select(sel => sel.primaryKey2).ToList()) });

IDictionary<string, string> dictionary = data.ToDictionary(pair => pair.Key, pair => pair.Items);

转换失败:

var privilegeLevelsDict = (Dictionary<string, List<string>>)HttpContext.Current.Session["_ProjectRechten"];

成功转换:

var privilegeLevelsDict = (List<KeyValuePair<string, List<string>>>)HttpContext.Current.Session["_ProjectRechten"];

为什么第一个转换不起作用?为什么我必须转换为 KeyValuePairs 列表而不是字典,即使我首先在 session 变量中放置了字典?

最佳答案

您要在此处向 session 添加列表:

HttpContext.Current.Session.Add(
"_ProjectRights",
ProjectRepository.GetProjectRechten(user1.UserId).ToList())

注意 ToList() 调用。如果 GetProjectRechten 正在返回一个字典,而这就是您希望在 session 中的内容(如果它可以序列化),那么您可以删除 ToList() 调用。

HttpContext.Current.Session.Add(
"_ProjectRights",
ProjectRepository.GetProjectRechten(user1.UserId))

如果你不能序列化一个字典但想稍后重新创建它,你可以很容易地做到这一点:

var storedValue = HttpContext.Current.Session["_ProjectRechten"];
var list = (List<KeyValuePair<string, List<string>>>) storedValue;
var dictionary = list.ToDictionary(pair => pair.Key, pair => pair.Value);

关于c# - 如何在 C# 中转换存储在 session 中的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com