2012-02-24 54 views
0

「序列化拋出異常的System.Web.Profile.DefaultProfile」asp.net系列化拋出異常

我使用了很多自定義類的但與標記它們都可序列化的屬性。該網站最初在默認頁面上正確加載,但一旦重定向發生在另一個頁面上,該頁面繼承自定義「BasePage」類而不是默認頁面類,則引發以下異常:

無法序列化會話狀態。在'StateServer'和'SQLServer'模式下,ASP.NET將序列化會話狀態對象,因此不允許使用不可序列化的對象或MarshalByRef對象。如果自定義會話狀態存儲在「自定義」模式下進行類似的序列化,則適用相同的限制。

intellitrace中的一個語句表示類似「未能序列化System.Web.Profile.DefaultProfile無法序列化」。它不是一個內置的.NET對象,如果是的話,我不能假定,它應該在所有情況下可序列化 ???

回答

0

對於我的特殊情況,我通過創建一個具有Seri​​alizable屬性的新自定義類來處理這個問題,該屬性將返回HttpContext.Current.Profile對象。然後,無論何時我需要將配置文件添加到會話中,我都會通過此新創建的類的屬性添加它。感謝@swannee和@Sinaesthetic的想法。

0

它被內置到ASP.Net中,但這並不意味着它是可序列化的。有很多不可序列化的框架類。

但是,也使默認配置文件與asp.net配置文件機制一起使用。你爲什麼試圖將它存儲在會話中?它已經擁有自己的可配置存儲機制。我認爲這可能是你正在與系統作戰的地方。

+0

我甚至沒有試圖將它存儲到會話中。當應用程序嘗試重定向到繼承「BasePage」(比方說)而不是默認的「Page」類的頁面時,會出現此問題。當然,BasePage:Page也被標記爲可序列化。 – MrClan 2012-02-24 17:48:43

+0

那麼這個「BasePage」類是什麼?它必須在會話中添加一些內容。有訪問Session對象的東西嗎? – swannee 2012-02-24 17:54:34

+0

我沒有看到任何。你能告訴我(或至少一個解決方法),如果我使用stateserver會話模式,我將如何將用戶配置文件保存在會話對象中。也許這會提供一些提示。 – MrClan 2012-02-24 18:09:49

1

昨天剛剛遇到同樣的問題。自定義對象不一定是問題,而是內部的對象。如果你有像System.Drawing.Image或Dictionary <>或其他任何不是固有的可序列化的東西,它會炸燬。所以你必須做一些挖掘。我不得不做一些事情,比如將一個List轉換爲一個字符串[],將它傳遞給Web服務(它接收一個List,但在intellisense中顯示爲接收一個字符串[])。

所以我想重新考慮一下。我們還發現,一旦我們在測試服務器上工作,我們就沒有完成。一旦我們發佈了網絡服務,其他問題就開始出現,這些問題是相似的。圖像不可序列化,因此我們在發送它們之前將它們轉換爲byte [],字典也不可序列化。

我意識到這不是一個很大的答案,但希望有一些幫助。

+0

謝謝,這絕對是一些幫助,特別是圖像的東西(我一開始就沒有想過)。 – MrClan 2012-02-25 18:33:39