In this article I will explain with an example, how to store Custom class object in Session in ASP.Net Core MVC.
Note: For beginners in ASP.Net Core (.Net Core 7), please refer my article ASP.Net Core 7: Hello World Tutorial with Sample Program example.
 
 

Model

The Model class consists of following properties.
public class PersonModel
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
 

Namespaces

You will need to import the following namespace in both the Controllers.
using Newtonsoft.Json;
 
 

Controllers

Source Controller

The Controller consists of following Action method.

Action method for handling GET operation

Inside this Action method, an object of PersonModel class is created and its properties are set.
Note: Session class does not have any provision to store objects and hence objects must be serialized to string and then stored.
 
Then, the object is converted into a JSON string (parsed) using SerializeObject method of JsonConvert class and stored in Session using SetString method.
Finally, using the RedirectToAction method the page is redirected to destination Controller.
public class HomeController : Controller
{
    public IActionResult Index()
    {
        //Create a Custom class object.
        PersonModel person = new PersonModel
        {
            Name = "Mudassar Khan",
            Age = 39
        };
 
        //Convert Person class object to JSON.
        string personJSON = JsonConvert.SerializeObject(person);
 
        //Set the JSON String value in Session object.
        HttpContext.Session.SetString("Person", personJSON);
 
        return RedirectToAction("Index", "PersonDetails");
    }
}
 

Destination Controller

The Controller consists of the following Action method.

Action method for handling GET operation

Inside this Action method, the JSON string is fetched from Session using its GetString method and then it is deserialized into PersonModel class object using DeserializeObject method of JsonConvert class.
Finally, the PersonModel class object is returned to the View.
public class PersonDetailsController : Controller
{
    public IActionResult Index()
    {
        //Get the JSON string from the Session object.
        string? personJSON = HttpContext.Session.GetString("Person");
 
        //Deserialize the JSON string to Person class object.
        PersonModel? person = JsonConvert.DeserializeObject<PersonModel>(personJSON);
 
        //Return the Person class object to View.
        return View(person);
    }
}
 
 

View

HTML Markup

Source View

The View is kept empty, as it is not required.
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
</body>
</html>
 

Destination View

Inside the View, the PersonModel class is declared as Model for the View.
Here, the Model property values are displayed.
@model Session_Object_Core.Models.PersonModel
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    Name: @Model.Name
    <br />
    Age: @Model.Age
</body>
</html>
 
 

Screenshot

ASP.Net Core: Store Custom class object in Session
 
 

Downloads