【发布时间】:2021-04-12 10:18:50
【问题描述】:
我尝试通过将列表转换为 Byte[] 来将列表保存在会话中。但是当我尝试将其转换回列表时,我只会得到一些随机数。这是我可以保存包含语言的列表的唯一方法。
在我转换并保存在会话中的代码下方
private void AllowedLanguages(Userdata User)
{
List<string> languages = new List<string>();
if (User.Deutsch == true) { languages.Add("Deutsch"); }
if (User.Englisch == true) { languages.Add("Englisch"); }
if (User.Französisch == true) { languages.Add("Französisch"); }
if (User.Italienisch == true) { languages.Add("Italienisch"); }
if (User.Japanisch == true) { languages.Add("Japanisch"); }
if (User.Mandarin == true) { languages.Add("Mandarin"); }
if (User.Polnisch == true) { languages.Add("Polnisch"); }
if (User.Portugiesisch == true) { languages.Add("Portugiesisch"); }
if (User.Spanisch == true) { languages.Add("Spanisch"); }
byte[] LanguagesInBytes = languages
.SelectMany(s => System.Text.Encoding.ASCII.GetBytes(s))
.ToArray();
HttpContext.Session.Set("AllowedLanguages", LanguagesInBytes);
}
这是我尝试将其返回到 Arraylist 或任何其他类型的带有字符串的列表的代码
var LanguagesByte = HttpContext.Session.Get("AllowedLanguages");
for (int i = 0; i < LanguagesByte.Length; i++)
{
String str = new String(LanguagesByte[i].ToString());
Languages.Add(str);
}
在我将其转换回以在页面上显示后,列表应该看起来像以前一样。这甚至是正确的方法还是我完全错了?
【问题讨论】:
-
不,您将不得不对列表进行序列化和反序列化。旁白:为什么用户不只是将列表作为属性?
-
我对上面的列表方式进行了序列化,用户是来自 SQL 数据库的对象
-
应该对数据库中的表进行规范化,否则您需要为每种新语言添加一列。您的反序列化与序列化代码不匹配,最好将其留给正确构建的序列化程序。
-
嗯,它是标准化的,我必须对用户本身进行操作,否则我会遇到更多问题。另一件事是因为学校,我不允许使用序列化程序......
标签: c# asp.net session type-conversion razor-pages