2016-03-14 42 views
8

Sto scrivendo un'applicazione ASP.NET 5 MVC 6 (Core). Ora sono arrivato a un punto in cui ho bisogno di memorizzare (impostare e ottenere) un oggetto nella cache di sessione (ISession).ASP.NET 5 (Core): come conservare gli oggetti nella cache di sessione (ISession)?

Come forse sapete, la Set -Metodo di ISession prende un byte-array e la Get -Metodo restituisce uno.

In un'applicazione non core, utilizzare lo BinaryFormatter per convertire il mio oggetto. Ma come posso farlo in un'applicazione di base?

risposta

14

Vorrei andare con la serializzazione degli oggetti su JSON e utilizzare i metodi di estensione su ISession per salvarli come string.

// 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); 

I metodi di estensione su ISession sono definiti nel Microsoft.AspNet(Core).Http namespace.

+0

Grazie per la risposta. La conversione a Json per ogni sessione-chiamata (potrebbe essere quasi ogni richiesta) performante? Dovrei prendere questo come una soluzione pulita o come una soluzione migliore disponibile? – evaenrique

+2

È possibile leggere [questa discussione sulla serializzazione binaria] (https://github.com/dotnet/corefx/issues/6564) sul repository github dotnet e perché non sarà supportato. –

+1

@evaenrique la mia ipotesi è che è molto più performante della serializzazione binaria (de) su ogni richiesta. Potresti prendere in considerazione l'utilizzo di [protobuf.net] (https://github.com/mgravell/protobuf-net) che è un serializzatore binario e molto veloce. –