2

我將會話存儲在會話狀態服務器上。 (存儲它inproc不起作用。)在會話中存儲linq-to-sql對象或備用解決方案

我想使用內置到視覺工作室(2010年)的linq-to-sql-designer生成的類來存儲和表示一些數據在我的網站。

在某些情況下,我想將這些對象中的一些放入會話中以便能夠在另一個網頁上訪問它們。

問題是,當我這樣做時,我得到一個錯誤,指出linq-to-sql的某些部分是不可序列化的。

我已經將我的datacontext「序列化模式」設置爲「單向」,無論如何。

然後我創建了一些可以更好地進行序列化的替代對象,用一個包含一些xml的基本字符串替換了一些被轉換爲linq.xelement字段的sql-xmldata字段。這些對象只包含基本類型。

仍然有錯誤。

然後我嘗試使用DataContractJsonSerializer得到一個byte [],我可以把到會話:

byte[] buf = null; 
var ds = new DataContractJsonSerializer(fi.GetType()); 
using (var ms = new MemoryStream()) 
{ 
    using (var w = JsonReaderWriterFactory.CreateJsonWriter(ms)) 
    { 
    ds.WriteObject(w, fi); 
    ms3.Position = 0; 
    buf = ms.ToArray(); 
    } 
} 
return buf; 

這裏的問題是,將JSON字符串似乎在一些人中間被切斷元素,因此以後不能反序列化。當我嘗試使用XmlWriter時,出現了一些問題,出於某種原因,它會切斷大約43000字節的xml文本。

這是相當混亂。

必須有更好的方法。

我得到的一個想法是簡單地將對象提交給一些臨時的sql服務器表,從sql服務器行獲得guid,將guid存儲在會話中而不是整個對象集中,然後重新讀取數據另一頁上的sql服務器。

什麼是實際可行的更好的解決方案?

回答

2

要讀出的MemoryStream之前刷新JsonWriter:

... 
ds.WriteObject(w, fi); 
w.Flush(); 
ms3.Position = 0; 
buf = ms.ToArray(); 
... 
+0

這解決了我想這個問題。謝謝。 – tomsv