2012-01-19 13 views
0

私はそれをセッション内に格納する1つのXML文書を持っています。したがって、各ポストバックでは、物理パスから再度ロードする必要はありません。私たちは州のサーバーを使用しています。xmlDocumentオブジェクトをSessionに格納することはできますか?

私はセッションに保管しようとしたとき、私はエラーを取得:

例外の詳細:System.Runtime.Serialization.SerializationException:アセンブリ「System.Xmlの、バージョン= 2.0を入力し「System.Xml.XmlDocumentの」を.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089 'はシリアル化可能とマークされていません。

私のコードは次のようなものです:

文字列resumeSection = String.Emptyを。

セロライゼーションの行い方は?

以下のエラーが発生する セッションの状態をシリアル化できません。 'StateServer'と 'SQLServer'モードでは、ASP.NETはセッション状態オブジェクトをシリアル化します。その結果、非直列化可能オブジェクトまたはMarshalByRefオブジェクトは許可されません。同様の逐次化がカスタムセッションステートストアによって「カスタム」モードで実行される場合、同じ制限が適用されます。

答えて

1

セッションにオブジェクトを保存するときは、[serealizable]とマークする必要があります。オブジェクトをセッションまたはビューステートに保存する前にシリアル化する必要があります。

はあなたが本当にあなただけの単純な型または軽量ビジネスエンティティ XmlDocumentよう ないオブジェクトを格納する必要がありますセッション状態 に複合型を置くべきではありません正直に言うと。

私は、カスタムシリアル化を使用するのが最善の方法だと思います。 クラスが大きすぎない場合は、XmlDocumentを文字列に保持してから インスタンスをシリアル化するときにその値を格納するだけです。次に、 デシリアライズするときに、SerializationInfoインスタンスからそれを取り出すことができます。

あなたはSOのポストにもある程度あなたの質問に答えることhere

this過去からの迅速なアイデアを得ることができ

+0

それをセッション変数を格納beforシリアライズを行うにはどのように? –

+0

は、回答http://rtur.net/blog/post/2008/03/16/Serializing-XMLDocument-to-binary-formatで提供されたリンクを見てください。aspx – Devjosh

+0

そこに示された方法でxmlDocumentを準備し、新しく用意されたxmlDocumentオブジェクトをあなたが割り当てたのと同じ方法でセッションに割り当てます – Devjosh

0

私は、しかし、私はこの同じ問題を自分自身に直面していた、これは2歳を知って、それ以来、私は解決策を見つけたので、あなたと共有したいと思っていました。 Devjoshはそうです、複雑なオブジェクトをセッションに格納すべきではありませんが、時には非常に便利なので、解決策があることを知っておくと良いでしょう。

xml/dataset/classのようなオブジェクトを保存すると、このエラーが発生することがあります。私はジェネリックオブジェクトとして保存しようとしているようです。データセットを格納していたコードと同じコードで、エラーが発生しました。一般的なオブジェクトと同じように格納することで正常に動作します。ここで

は簡単な例です:

public static void InsertSessionObject(string item, object obj) 
    { 
     HttpContext.Current.Session.Add(item, obj); 
    } 

    public static object GetSessionObject(string item) 
    { 
     return HttpContext.Current.Session[item]; 
    } 

    public static void RemoveSessionObject(string item) 
    { 
     HttpContext.Current.Session.Remove(item); 
    } 

    DataSet lastResults = GetDatasetResults(); 

    InsertSessionObject("myDataset", lastResults); 

    lastResults = (DataSet)GetSessionObject("myDataset"); 

    RemoveSessionObject("myDataset"); 
関連する問題