Проверка существования объекта c#

260
17 января 2018, 14:03

Добрый день , провожу десериализацию json , если один из пунктов поиска отсутствует то появляется ошибка , например если в json отсутствует пункт description то выкинет с ошибкой string description = a["offer"]["description"].ToString();

как проверить существует ли объект или же данная информация не указана не ловя ошибку ?(try catch замедляют использовать бы не хотелось) Спасибо

JObject a = JObject.Parse(autoinf.GetcodeAutoUrl(url));
Answer 1

Кроме хорошего способа, предложенного в комментариях, можно использовать Json.Linq:

var description = a["offer"].Children<JProperty>()
    .FirstOrDefault(p => p.Name == "description");
if (description != null)
    Console.WriteLine(description.Value);

Методом Children получаем коллекцию нужных типов и далее находим нужное нам свойство по имени. Этот способ можно применять для получения любых возможных типов json.

Answer 2

Т.к. при отсутствии ключа, указанного в индексаторе, 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();

Литература по теме:

  1. Операторы с условием NULL

  2. ?? Оператор

READ ALSO
Как удалённо подключаться к базе данных MS Sql server?

Как удалённо подключаться к базе данных MS Sql server?

Есть база данных на MS Sql Server и есть приложение Win Forms

218
Ввод тега в текстовое поле

Ввод тега в текстовое поле

ЗдравствуйтеЕсть проблема с вводом данных в текстовые поля

205
Свойство зависимости из UserControl в MainWindow

Свойство зависимости из UserControl в MainWindow

Не работает свойство зависимости

202