Генерация C# классов из JSON или XML

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

В Visual Studio 2013 уже встроены инструменты, позволяющий сгенерировать необходимые классы буквально в несколько нажати. В качестве примера я рассмотрю получение актуального прогноза погоды. В качестве источника я буду брать сайт openweathermap.org. Погоду я буду получать для города Витебск.

Адрес запроса будет следующий:

http://api.openweathermap.org/data/2.5/weather?q=Vitebsk&mode=json&units=metric

В запросе я указал целевой город(Vitebsk), формат данный(json) и метрическую систему(metric)

В результате приходят следующие данные в формате JSON.

Теперь создадим проект для работы с прогнозом погоды. Добавим в проект класс WeatherJson. Теперь необходимо зайти в созданный класс, удалить имеющееся описание класса WeatherJson, скопировать XML код полученный в запросе в буфер обмена с вставить его следующим образом: выбрать EDIT Paste SpecialPaste JSON as Classes.

В результате будет вставлен следующий класс:

    public class Rootobject
    {
        public Coord coord { get; set; }
        public Sys sys { get; set; }
        public Weather[] weather { get; set; }
        public string _base { get; set; }
        public Main main { get; set; }
        public Wind wind { get; set; }
        public Clouds clouds { get; set; }
        public int dt { get; set; }
        public int id { get; set; }
        public string name { get; set; }
        public int cod { get; set; }
    }

    public class Coord
    {
        public float lon { get; set; }
        public float lat { get; set; }
    }

    public class Sys
    {
        public float message { get; set; }
        public string country { get; set; }
        public int sunrise { get; set; }
        public int sunset { get; set; }
    }

    public class Main
    {
        public float temp { get; set; }
        public float temp_min { get; set; }
        public float temp_max { get; set; }
        public float pressure { get; set; }
        public float sea_level { get; set; }
        public float grnd_level { get; set; }
        public int humidity { get; set; }
    }

    public class Wind
    {
        public float speed { get; set; }
        public float deg { get; set; }
    }

    public class Clouds
    {
        public int all { get; set; }
    }

    public class Weather
    {
        public int id { get; set; }
        public string main { get; set; }
        public string description { get; set; }
        public string icon { get; set; }
    }

Точно также можно генерировать C# классы из XML данных.

Я переименую название класса Rootobject на WeatherJson.

Теперь можно воспользоваться полученным классом, для этого я написал следующий код:

var url = "http://api.openweathermap.org/data/2.5/weather?q=Vitebsk&mode=json&units=metric";
var request = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)request.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
var responseText = reader.ReadToEnd();
var weather = JsonConvert.DeserializeObject<WeatherJson>(responseText);

Console.WriteLine("Город: {0}", weather.name);
Console.WriteLine("Температура: {0} град. цельсия", weather.main.temp);
Console.WriteLine("Скорость ветра: {0} м/с", weather.wind.speed);

Для работы с JsonConvert нужно установить Json.Net из NuGet пакетов.

Результат будет следующим:

Надеюсь, данная информация сэкономит вам немного времени.

Приятного программирования…

Комментарии (1) -

Так же существуют множество онлайн сервисов, которые сгенерируют вам c# код на лету, например https://usetoolz.ru, если нет возможности воспользоваться студией.

Добавить комментарий