Пример работы С#+Json

Всем привет, не давно меня попросили настроить интеграцию с внешним сервисом, я приступил к работе и после подумал, возможно кому то может пригодиться такой функционал, т.к. по большей части все взаимодействия между системами не находящимися в одном домене или просто закрытые по соглашению с вендером, они частенько так делают, в договоре это обычно прописано. Но сейчас не об этом, в общем на примере, одного погодного сервиса покажу как обмениться данными через JSON между приложениями.

Кому лень читать, проект доступен для скачивания в конце статьи.

Остальные, поехали.
1) Заходим на сайт openweathermap.org и регистрируемся.
2) После регистрации вам придет письмо, примерно такое.


3) Что в нем важно, во первым там есть API Key, а во вторых пример обращения к удаленному сервису. Важный момент, если я правильно понял, у них какой то временной лаш между регистрацией нового ключа у себя и отправкой письма, письмо приходит практически сразу, а вот ключ точно будет действовать через 30 минут.
4) Переходим в Visual Studio и создаем WinForms проект.
5) Называем его WeatherJson
6) Переходим в код файла Form1.cs
7) Добавляем библиотеки System.Net и System.IO — первая нужна для отправки и получения запроса на сервер, вторая нужна для обработки ответа с сервера.
8) Также нам необходимо добавить к проекту внешнюю библиотеку Newtonsoft, для этого нужно сделать следующее:



9) Добавляем библиотеку Newtonsoft.Json;
10) Теперь переходим на форму и добавляем элемент TextBox, выставляем св-во Multiline значение true и растягиваем его по вертикали и горизонтали.

11) Теперь нажимаем на форму 2 раза левой кнопкой мыши, произойдет переход в код, там создаться метод private void Form1_Load(object sender, EventArgs e)
12) В нем пишем следующее:

13) Запускаем, проверяем — получаем ответ, такого вида:

14) Теперь давайте разберемся, что конкретно присылает сервер

***Важный момент с сайта необходимо скачать погодные иконки находятся здесь https://openweathermap.org/weather-conditions, положить нужно в проект(в папку debug).
15) Теперь нужно определить какого типа данные нам присылает сервер.

16) Теперь нам нужно создать все эти классы. Начнем с класса «coord»:

17) Теперь класс «weather»:

18) Класс main:

19) Класс «wind»

20) Класс «clouds»

21) Класс «sys»

22) Теперь основной класс «openweather» в который будем записывать ответ сервера.

23) Возвращаемся в файл Form1.cs и изменяем его.

24) Добавляем на форму новые элементы для проверки — Кучу label и один panel для иконки.

25) Переходим обратно в Form1.cs и присваиваем значение label`ам и загоняем иконку в panel. Теперь файл Form1.cs выглядит так.

25) Запускаем, проверяем.

А теперь, так сказать для интерактива, могу вам посоветовать, сделать полноценную программу, с выводом полной информации.
1) Уберите textBox1, отладка завершена, он дольше не нужен.
2) Переведите фаренгейты в градусы.
3) Добавьте к каждому значению, единицы измерения.
4) Добавить таймер чтобы получать актуальную информацию о погоде, но значение нужно рассчитать так чтобы кол-во запросов не превышало лимит в 40к.\месяц — отведенный для бесплатного использования.

Если нужно сделать еще примеры с использованием C#+JSON, но в другом разрезе, пишите в комментах, по возможности, реализую.

9+

Приложение к статье

  • zip WeatherJSon
    Размер файла: 8 MB Кол-во скачиваний: 426

9 thoughts on “Пример работы С#+Json

  1. Спасибо за статью, но можете разобрать пример когда нужно из API достать JSON и записать данные в базу mssql(2012, до 16 т.к. в ней есть встроенная работа с Json) и обратно.

    0
    1. Приветствую, в ближайшее время сделаю расширенную версию с упором на ваши пожелания.

      0
  2. Добрый день! А если у меня класс динамичный?
    К примеру :
    {
    «users»:{
    «User_9239120321»: { // вот здесь меняются цифры после User_

    }
    }
    }
    Как мне получить именно эти цифры ?

    0
    1. Не уверен что это возможно, вам проще будет передать цифры в качестве одного из параметров на веб сервис, и внутри сервиса уже обрабатывать нужным образом.

      0
      1. А если так «JObject.ChildrenTokens, которое получает все дочерние элементы». Только я не понимаю, как применить.

        0
        1. sorry за спам, но вот. Через адские костыли. Я сделал.
          JObject o = JObject.Parse(File.ReadAllText(@json));
          string jselection = o.SelectToken(«users»).ToString();
          string[] outputString = jselection.Split(‘,’);
          string resultString = string.Join(string.Empty, Regex.Matches(outputString[0], @»\d+»).OfType().Select(m => m.Value));

          на выходе получаем число в виде строки то, что надо «2312312312»

          0
      2. я сделал так

        JObject o = JObject.Parse(File.ReadAllText(@jsonFile));
        string parseString = o.SelectToken(«users»).ToString();

        и получил вот это :
        {
        «USER_21123123» : {
        и все, что внутри
        }
        }

        осталось понять, как выдернуть строку с USER_ (USER_ не меняется, только числа)

        ну а отделить числа от букв, это легко.

        0

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.