Добрый день , провожу десериализацию json , если один из пунктов поиска отсутствует то появляется ошибка , например если в json отсутствует пункт description то выкинет с ошибкой string description = a["offer"]["description"].ToString();
как проверить существует ли объект или же данная информация не указана не ловя ошибку ?(try catch замедляют использовать бы не хотелось) Спасибо
JObject a = JObject.Parse(autoinf.GetcodeAutoUrl(url));
Кроме хорошего способа, предложенного в комментариях, можно использовать Json.Linq:
var description = a["offer"].Children<JProperty>()
.FirstOrDefault(p => p.Name == "description");
if (description != null)
Console.WriteLine(description.Value);
Методом Children получаем коллекцию нужных типов и далее находим нужное нам свойство по имени. Этот способ можно применять для получения любых возможных типов json.
Т.к. при отсутствии ключа, указанного в индексаторе, JObject возвращает null, самый просто способ - воспользоваться оператором ?.:
string description = a["offer"]["description"]?.ToString();
В этом случае вместо вызова метода ToString() будет сразу возвращен null, при необходимости вы можете это проверить (if (description == null) ...) или оставить как есть (если null является допустимым значением).
Так же, если в случае отсутствия ключа вам необходимо использовать какое-то значение по умолчанию, удобно использовать оператор ??:
string description = a["offer"]["description"]?.ToString() ?? "Описание отсутствует";
Если также может не существовать элемента offer, можно еще и оператор ?[] "прикрутить":
string description = a["offer"]?["description"]?.ToString();
Литература по теме:
Операторы с условием NULL
?? Оператор
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости