2016-03-14 34 views
8

私はASP.NET 5 MVC 6(コア)アプリケーションを作成しています。今度は、セッション・キャッシュ(ISession)にオブジェクトを格納(設定および取得)する必要があることに気付きました。ASP.NET 5(Core):オブジェクトをセッションキャッシュ(ISession)に格納する方法は?

ご存知のように、Setのメソッドは、byte-arrayとなり、Getのメソッドは1を返します。

非コアアプリケーションでは、BinaryFormatterを使用してオブジェクトを変換します。しかし、どのようにコアアプリケーションでそれを行うことができますか?

答えて

14

オブジェクトをJSONにシリアル化し、ISessionの拡張メソッドを使用して、stringのように保存します。 ISession

// Save 
var key = "my-key"; 
var str = JsonConvert.SerializeObject(obj); 
context.Session.SetString(key, str); 

// Retrieve 
var str = context.Session.GetString(key); 
var obj = JsonConvert.DeserializeObject<MyType>(str); 

拡張メソッドはMicrosoft.AspNet(Core).Http名前空間で定義されています。

+0

ありがとうございました。セッションごとにJsonに変換していますか?(ほとんどのリクエストごとに)実行可能ですか?私はこれを清潔な解決策として、または最善の方法として利用可能な解決策として取るべきでしょうか? – evaenrique

+2

dotnet github repoの[バイナリシリアル化に関するこのディスカッション](https://github.com/dotnet/corefx/issues/6564)とそれがサポートされない理由を読むことができます。 –

+1

@evaenrique私の推測では、すべてのリクエストでバイナリ(デ)シリアライゼーションよりもはるかにパフォーマンスが良いということです。バイナリシリアライザで、非常に高速な[protobuf.net](https://github.com/mgravell/protobuf-net)の使用を検討することもできます。 –

関連する問題