2017-02-07 2 views
1

У меня есть список для хранения в сеансе в режиме SqlServer.Как пометить список или 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>; 

Я получил сообщение об ошибке, говоря,

типа Exception : System.Runtime.Serialization.SerializationException Exception m essage: Type '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

Когда вы помещаете объект в сеанс, он сериализуется там. Это также означает, что объекты, не связанные с сериализацией, не могут быть сохранены там. Затем, когда вы выходите из сеанса, он становится десериализованным. Вы не можете десериализовать интерфейс. Это должен быть конкретный класс.

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

cast, как показано ниже.

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

Не работает. Это должно быть что-то, что я забыл. – Blaise