В вопросе не упоминается, какое исключение выдается, но этот код гарантированно завершится ошибкой при первой попытке чтения из сеанса.
Второй фрагмент пытается десериализовать строку, не проверяя, является ли она нулевой или нет:
cart=(Cart)JsonConvert.DeserializeObject(bindingContext.HttpContext.Session.GetString(sessionKey));
Или, более читабельным образом:
var json=bindingContext.HttpContext.Session.GetString(sessionKey);
cart = (Cart)JsonConvert.DeserializeObject(json);
JsonConvert.DeserializeObject()
сгенерирует, если его аргумент нулевой.
Строка json должна быть проверена перед тем, как вызовет DeserializeObject
. При некоторой очистке код может выглядеть так:
var session=bindingContext.HttpContext.Session;
if(session == null)
{
return null;
}
var json = sessio.GetString(sessionKey);
if (!String.IsNullOrWhitespace(json))
{
var cart=JsonConvert.DeserializeObject<Cart>(json);
return cart;
}
else
{
var emptyCart=new Cart();
var value=JsonConvert.SerializeObject(emptyCart);
session.SetString(sessionKey, value);
return emptyCart;
}
Нулевой безопасный оператор может использоваться для обработки пропущенных значений контекста, например, во время тестирования:
var session=bindingContext?.HttpContext?.Session;
Это вернет ноль, если какой-либо из объектов будет ноль.