2

セッション状態のサーバーにセッションを保存しています。 (inprocを保存しても機能しません)linq-to-sqlオブジェクトをセッションまたは代替ソリューションに格納します。

私のウェブサイトにオブジェクトを保存して表現するために、ビジュアルスタジオ(2010)に組み込まれているlinq-to-sqlデザイナーによって生成されたクラスを使用しようとしています。 。

場合によっては、これらのオブジェクトのいくつかをセッションに入れて、別のWebページでそれらのオブジェクトにアクセスできるようにしたいとします。

問題は、私がそれを行うと、linq-to-sqlの内容の一部がシリアル化できないというエラーが発生することです。

私はdatacontext「シリアル化モード」を「単方向」に設定しています。

次に、linq.xelementフィールドに変換されたいくつかのsql-xmldataフィールドをいくつかのxmlを含む基本文字列に置き換えて、よりシリアライズ可能な代替オブジェクトを作成しました。オブジェクトには基本タイプのみが含まれます。

まだエラーがあります。

その後、私は私がセッションに入れることができます[]というバイトを取得するためにDataContractJsonSerializerを使用してみました:

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 Serverテーブルに送信し、SQL Serverの行からGUIDを取得し、オブジェクトのセット全体ではなくセッションにGUIDを格納してから、他のページのSQL Server

実際に機能する優れたソリューションは何ですか?

答えて

2

はMemoryStreamをを読む前にJsonWriterをフラッシュするようにしてください:

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

これは私が推測する問題を解決しているだろう。ありがとう。 – tomsv

関連する問題