2017-02-07 10 views
1

私はSqlServerモードでセッションを保存するためのリストを持っています。ListまたはIEnumerableをシリアライズ可能にするにはどうすればいいですか?

[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例外m System.Linq.Enumerable + WhereSelectEnumerableIterator 2 [System.String、mscorlib、Version = 4.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089]、[System.Web.Mvc.ModelState、System.Web.Mvc 、バージョン= 5.2.3.0、Culture =ニュートラル、PublicKeyToken = 31bf3856ad364e35]]、mscorlib、バージョン= 4.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089]、[myproject.ModelStateSummary、myproject、Version = 1.0.0.0、Culture =ニュートラル、PublicKeyToken = null]] 'System.Core、Version = 4.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089'は直列化可能としてマークされていません。

セッションにリストを保存する際に何か問題がありましたか?

+0

セッションに大きなオブジェクトを配置するように注意してください。 –

答えて

4

オブジェクトをSessionに配置すると、そこにオブジェクトがシリアル化されます。これは、直列化不可能なオブジェクトをそこに格納することもできないことを意味します。その後、セッションからそれを取得すると、デシリアライズされます。インターフェイスに逆シリアル化することはできません。それは具体的なクラスでなければなりません。

var stateSummaries = Session["ModelStateSummaryModel"] as List<ModelStateSummary>; 
0

あなたは以下のようにcastことができます。

var stateSummaries = (List<ModelStateSummary>)Session["ModelStateSummaryModel"]; 
+0

動作しません。それは私が無視したものでなければならない。 – Blaise

関連する問題