Хорошо, в качестве базового примера того, как настроить сложный объект в вашем сеансе в .NET Core:
Сначала настройте ваш сеанс:
В вашем файле Startup.cs подСконфигурируйте метод, добавьте следующую строку:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
}
А в метод ConfigureServices добавьте следующую строку:
public void ConfigureServices(IServiceCollection services)
{
//Added for session state
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
});
}
Чтобы добавить сложные объекты из вашего списка в ваш сеанс (обратите вниманиечто это только пример и не относится к вашему случаю, так как я не знаю, что такое определение PropertyOwnerRoleViewModel):
Модель:
public class EmployeeDetails
{
public string EmployeeId { get; set; }
public string DesignationId { get; set; }
}
public class EmployeeDetailsDisplay
{
public EmployeeDetailsDisplay()
{
details = new List<EmployeeDetails>();
}
public List<EmployeeDetails> details { get; set; }
}
Затем создайте помощник SessionExtension для установки и извлечения вашего комплекса.объект как JSON:
public static class SessionExtensions
{
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);
}
}
Добавление этого сложного объекта в ваш сеанс:
//Create complex object
var employee = new EmployeeDetailsDisplay();
employee.details.Add(new EmployeeDetails
{
EmployeeId = "1",
DesignationId = "2"
});
employee.details.Add(new EmployeeDetails
{
EmployeeId = "3",
DesignationId = "4"
});
//Add to your session
HttpContext.Session.SetObjectAsJson("EmployeeDetails", employee);
И, наконец, для получения ваших сложных объектов из вашего сеанса:
var employeeDetails = HttpContext.Session.GetObjectFromJson<EmployeeDetailsDisplay>("EmployeeDetails");
//Get list of all employee id's
List<int> employeeID = employeeDetails.details.Select(x => Convert.ToInt32(x.EmployeeId)).ToList();
//Get list of all designation id's
List<int> designationID= employeeDetails.details.Select(x=> Convert.ToInt32(x.DesignationId)).ToList();