2012-09-10 51 views
0

的序列化的列表,我用這個代碼返回對象的列表將它們存儲在了進程內會話:使不確定型

Session["Data"] = DataContext.ObjectSet.Select(rec => new { Title = rec.Title , Count = rec.Count }); 

但你也知道,我們不能存儲在非序列化類一個out-proc會話,有沒有辦法做到這一點? 請不要說我定義它的類,我要尋找一個在C#中的後門或技巧來做到這一點

感謝

回答

0

一個簡單的方法是轉換到一個數組對象

Session["Data"] = DataContext.ObjectSet 
         .Select(rec => new { Title = rec.Title , Count = rec.Count }) 
         .ToArray(); 

你甚至可以將其轉換爲一個列表oibject並序列化爲自己的對象

var data = DataContext.ObjectSet 
      .Select(rec => new SessionData() { Title = rec.Title , Count = rec.Count }) 
      .ToList(); 

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
    new System.Web.Script.Serialization.JavaScriptSerializer(); 

Session["Data"] = oSerializer.Serialize(data); 

,並使用

public class SessionData { 
    public string Title { get; set; } 
    public int Count { get; set; } 
} 

但是在會議中持有這樣的對象......你可能會做錯事不對?想象一下,在給定的時間內,你將有1000個記錄...

+0

我喜歡第一個解決方案,我知道我可以在會話中存儲一個不可序列化的數組,我會檢查它,但是什麼是關於在會話中存儲大約1000條記錄是否存在任何錯誤: - /? –

+0

「不可序列化的數組」一個數組是不可序列化的......一個數組將被轉換爲一個字符串,或者您可以強制添加'.ToString()',因爲這是您可以在Session中保存的數組。一個數組,它是一個本地對象,不是一個自定義對象,所以它總是可序列化的。關於** 1000條記錄**,這是每個用戶,每個會話......您將消耗服務器中的所有內存,並且如果您在共享環境中託管,則它們將停止應用程序的運行,因爲它將消耗到很多資源... – balexandre

+0

那麼,解決方案是什麼?我在其他頁面中使用此會話作爲水晶報表數據源 –