我有一个以SqlServer模式存储在会话中的列表。
[Serializable]
public class ModelStateSummary
{
public string PropertyName { get; set; }
public string[] ErrorMessages { get; set; }
}
设置会话
var list = new List<ModelStateSummary> {...};
Session["ModelStateSummaryModel"] = list;
但是当我尝试从会话中检索模型时
var stateSummaries = Session["ModelStateSummaryModel"] as IEnumerable<ModelStateSummary>;
我收到了一个错误,说,
异常类型:System.Runtime.Serialization.SerializationException异常消息:输入'System.Linq.Enumerable + WhereSelectEnumerableIterator
2[[System.Collections.Generic.KeyValuePair
2 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Web.Mvc.ModelState,System.Web.Mvc,Version = 5.2.3.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 ],[myproject.ModelStateSummary,myproject,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'在Assembly'System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为序列化的。
将列表保存到会话中我做错了吗?
答案 0 :(得分:4)
当您将对象放入Session时,它会在那里被序列化。这也意味着不能在那里存储不可序列化的对象。然后,当您将其从会话中删除时,它将被反序列化。您无法反序列化到接口。它必须是一个具体的类。
var stateSummaries = Session["ModelStateSummaryModel"] as List<ModelStateSummary>;
答案 1 :(得分:0)
您可以cast
如下所示。
var stateSummaries = (List<ModelStateSummary>)Session["ModelStateSummaryModel"];