If и JSON в С#?

306
07 ноября 2017, 23:34

Как сделать проверку если не существует элемента в json ? Есть json от стим веб апи(http://steamcommunity.com/market/priceoverview?appid=730&market_hash_name=...), который я получаю в своем проекте c#, обычно в json есть median_price, но иногда его нет(Например здесь есть - http://steamcommunity.com/market/priceoverview?appid=730&market_hash_name=Negev%20%7C%20Army%20Sheen%20%28Minimal%20Wear%29&format=json , а здесь нет http://steamcommunity.com/market/priceoverview?appid=730&market_hash_name=StatTrak™%20M4A4%20%7C%20Howl%20%28Field-Tested%29&format=json). Я бы хотел сделать проверку на его наличие.

Answer 1

Используйте JSON.Net, мой вам совет...

Берем JSON, который может быть и создаем на его основе класс:

public class Root
{
    public bool Success { get; set; }
    [JsonProperty("lowest_price")]
    public string LowestPrice { get; set; }
    public int Volume { get; set; }
    [JsonProperty("median_price")]
    public string MedianPrice { get; set; }
}

Обратите внимание на то, что название каждой переменной должно быть такое же, как и в JSON, но не всегда это красиво в коде и для этого мы указываем JsonProperty с именем, которое находится в JSON - это позволит нам назвать переменную как угодно.

Имея класс под наш JSON - мы можем сделать десериализацию:

var json = JsonConvert.DeserializeObject<Root>(StringData);

StringData - ответ от сервера, в виде String.

Ну и дальше спокойно работайте с данными. К примеру, если прочесть JSON с одним значением Success и вывести все данные на экран:

Console.WriteLine(json.Success);
Console.WriteLine(json.LowestPrice);
Console.WriteLine(json.Volume);
Console.WriteLine(json.MedianPrice);

То в ответ мы получим:

False

0

То есть говоря другими словами, при десериализации JSON - вы получите только те данные, которые есть в файле, остальное будет иметь NULL. И тут вы можете делать нужные вам проверки:

if (json.LowestPrice != null) //как пример...

В общем, в вашем случае не обязательно отслеживать есть ли на сервере это значение, или его нету. Главное правильно десериализовать!

READ ALSO
WPF ListView убрать подсветку

WPF ListView убрать подсветку

Доброго дня, знатоки! Столкнулся с такой проблемой, необходимо сделать выделение списка ListView прозрачным, чтобы оно вообще никак не фигурировало

283
Что лучше применять для построения &ldquo;чат&rdquo;-бота

Что лучше применять для построения “чат”-бота

Добрый день, товарищи! Собственно, почему "чат" в вопросе взято в кавычки: Требуется не совсем чат-бот, а просто бот, отвечающий на весьма и весьма...

237
Минимальное число [требует правки]

Минимальное число [требует правки]

Дано положительное 4-ёхзначное число, нужно вывести минимальное число, которое можно получить перестановкой цифр в заданом числе

227
Не изменяются байты при записи их через WriteProcessMemory();

Не изменяются байты при записи их через WriteProcessMemory();

не записывается ни в какую, handle взял, адрес указал, байты и размер тоже, но при запуске кода байты в программе не записываются

238