Storing complex objects in Session and TempData variables.

Session and TempData variables can be used in MVC controllers to pass variables between actions or from actions to views, however if you want to pass complex objects through using these variables the base classes need to be extended to serialize/deserialize the provided objects to/from json.

Session

	
public static void SetObjectAsJson(this ISession session, string key, object value)
{
	session.SetString(key, JsonConvert.SerializeObject(value));
}

public static T GetObjectFromJson<T>(this ISession session, string key)
{
	var value = session.GetString(key);

	return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
}
	

TempData

	
public static class TempDataExtensions
{
	public static void Put<T>(this ITempDataDictionary tempData, string key, T value) where T : class
	{
		tempData[key] = JsonConvert.SerializeObject(value);
	}

	public static T Get<T>(this ITempDataDictionary tempData, string key) where T : class
	{
		object o;
		tempData.TryGetValue(key, out o);
		return o == null ? null : JsonConvert.DeserializeObject<T>((string)o);
	}
}
	

Once the above classes have been created the desired object can be stored like so.

	
HttpContext.Session.SetObjectAsJson("user", user);
TempData.Put<User>("user", user);
	

And retrieved with the following.

	
User userTemp = TempData.Get<User>("user");
User userSession = HttpContext.Session.GetObjectFromJson<User>("user");
	

Leave a Reply

Your email address will not be published. Required fields are marked *