gpt4 book ai didi

c# - 如何序列化存储在 Session 中的 ListItem

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

我有这段代码在我的本地服务器上运行良好:

if (Page.IsPostBack)
{
string[] questions = new string[20];
string[] answers = new string[20];
for (int i = 0; i < lstQuestions.Items.Count; ++i)
{
questions[i] = lstQuestions.Items[i].Text;
answers[i] = lstQuestions.Items[i].Value;
}
Session["questions"] = questions;
Session["answers"] = answers;
if (Session["qalist"] == null)
{
List<ListItem> qalist = lstQuestions.Items.Cast<ListItem>().ToList();
Session["qalist"] = qalist;
}
else
{
List<ListItem> qalist = (List<ListItem>)Session["qalist"];
lstQuestions.DataSource = qalist;
}
}

else
{
if (Session["questions"] != null && Session["answers"] != null && Session["qalist"] != null)
{
List<ListItem> qalist = (List<ListItem>)Session["qalist"];
foreach (ListItem item in qalist)
{
lstQuestions.Items.Add(new ListItem(item.Text, item.Value.ToString()));
}
}
}

但是,当我转到 Web 服务器时,出现错误“System.Web.UI.WebControls.ListItem,未标记为可序列化”。我研究了如何使它可序列化,甚至如何将“qalist”转换为实际上可序列化的值,然后将该值保存到 session 中。然而,我的努力没有结果。序列化是最好的途径吗?正在寻找一种不同的方式来存储这些数据?还是别的?

最佳答案

System.Web.UI.WebControls.ListItem正如您所观察到的,不可序列化。因此您不能将其存储在 session 中。

我有点困惑为什么要保存 ListItem 的两个数据属性- questionsanswers - 分别进入Session,还有ListItem本身。在我看来,拥有 questionsanswers , 你拥有重建 ListItem 所需的一切.

但是如果你想将你的问题和答案成对保存,你可以使用 List<T>System.Tuple<string, string> ,这是可序列化的,甚至是 System.Web.UI.Pair ,这也是可序列化的。

您也可以编写自己的(非常简单的)类,并将其标记为可序列化:

[Serializable]
public class QuestionAndAnswer
{
public string Question { get; set;}
public string Answer { get; set; }
}

关于c# - 如何序列化存储在 Session 中的 ListItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943300/

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