[英]Converting a Byte[] from a Session back to a List<String> in c#
我嘗試通過將列表轉換為字節 [] 來將列表保存在 Session 中。 但是當我嘗試將其轉換回列表時,我只會得到一些隨機數。 這是我可以使用其中的語言保存列表的唯一方法。
在我轉換並將其保存在 session 的代碼下方
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);
}
在我將其轉換回以在頁面上顯示它之后,列表應該看起來像以前。 這甚至是正確的方法還是我完全錯了?
目前,您將編碼值排序為一個長字節數組,當您解碼它們時,您不知道它們從哪里開始或結束 - 所以如果您添加分隔符,您可以這樣做:這里我使用\0
:
byte[] LanguagesInBytes = languages
.SelectMany(s => System.Text.Encoding.ASCII.GetBytes(s + "\0"))
.ToArray();
然后,解碼它們:
List<string> output = new List<string>();
string language = string.Empty;
for (int i = 0; i < LanguagesInBytes.Length; i++) {
var item = LanguagesInBytes[i];
if (item == 0) {
output.Add(language);
language = string.Empty;
}
else {
language += System.Text.Encoding.ASCII.GetString(new[] { item });
}
}
另請注意,將值存儲為 Ascii 意味着在此過程中會丟失像ö
這樣的擴展字符。
在byte[]
集合上調用.ToArray()
將返回一個byte[][]
(本質上是一個字節數組的數組)
第二部分已接近,但您需要按如下方式進行更改。
這是將其從 object 轉換為 byte[][]
var LanguagesByte = (byte[][])HttpContext.Session.Get("AllowedLanguages");
然后我們必須從每個數組中檢索字符串,如下所示
for (int i = 0; i < LanguagesByte.Length; i++)
{
String str = Encoding.ASCII.GetString(LanguagesByte[i]);
Languages.Add(str);
}
您也可以使用 linq 來實現這一點
List<string> Languages = LanguageByte.Select(x => Encoding.ASCII.GetString(x)).ToList()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.