Добрый день , провожу десериализацию 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
?? Оператор
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть база данных на MS Sql Server и есть приложение Win Forms