Шпаргалки
December 20, 2018

Работа с JSON на C#. Часть 2. Хранение данных.

На прошлом уроке мы узнали что такое JSON, в чем его отличие от XML и разобрали его структуру. На этом уроке мы уже будем с ним работать. Пока что мы будем работать только с хранением данных в файле с форматом *.json. Будем хранить в нем данные человека. Погнали!


Подготовка

Думаю создавать консольное приложение вы умеете, так что начну с установки библиотеки Newtonsoft.json. Нам нужен именно он, ведь для данной задачи он лучше всего подойдет, а делать свой велосипед никто не спешит.

Заходим в проект и жмем ПКМ по проекту в обозревателе решений и выбираем "Управление пакетами NuGet...". Там заходим во вкладку "Обзор" и находим пакет "Newtonsoft.Json" и потом устонавливаем его. Думаю с этим у вас проблемы не возникнут. (надеюсь)

Далее нам понадобится одна библиотека. Она нужна для использования файлов, т.е. их чтения, записи и создания. Чтобы это сделать вы должны в самом начале файла Program.cs (там где много using) вписать следующее:

using System.IO;

Так, проект мы подготовили, теперь приступаем.

Создание самих данных

Чтобы использовать JSON как хранитель данных сначала вам нужны эти самые данные. Но в каком виде их вписывать? В виде классов, конечно! Т.е. мы будем создавать класс, а его поля - это данные. Сейчас расскажу поподробнее.

Как я уже говорил, в JSON есть три типа данных: переменные, массивы и объекты. Однако при вписывании этих данных у нас немного другие "правила". (Но не беспокойтесь, наша библиотека Newtonsoft с этим справится) У наших классов есть эти типы: поля классов, массивы и объекты других классов. Они выглядят так:

    public class Person
    {
        //вот поля (в данном случае свойства, ведь мы любим сахарок!)
        public string Name { get; set; }
        public int Age { get; set; }
        //вот массивы переменных (в нашем случае массив класса String)
        public string[] Hobbies { get; set; }
        //а вот объекты др. классов
        public Baggage baggages { get; set; }
        public Pet pets { get; set; }
    }

Как вы уже поняли, нам нужен классы Baggage и Pet:

    public class Baggage
    {
        public int Weight { get; set; }
        public string Type { get; set; }
    }

    public class Pet
    {
        public string WhatsAnimal { get; set; }
        public string Name { get; set; }
        public int Weight { get; set; }
    }

Для преобразования объекта Person в JSON формат мы используем метод SerializeObject класса JsonConvert. Вот:

        static void Main(string[] args)
        {
            var myNeighbour = new Person
            {
                //просто вписываем значения полей как обычно
                Name = "Sergey",
                Age = 38,
                //создаем новый массив string с множеством стоковых данных и вложим его в переменную Hobbies
                Hobbies = new string[] {"Смотреть футбол", "Идти на работу", "Ссориться с женой"},
                //создаем новый объектс класса Baggage/Pet со своими данными и вложим его в переменную baggages/pets
                baggages = new Baggage
                {
                    Weight = 17,
                    Type = "Чемодан"
                },
                pets = new Pet
                {
                    WhatsAnimal = "Кошка",
                    Name = "Киса",
                    Weight = 9
                }
            };
            string OurData = JsonConvert.SerializeObject(myNeighbour); //делаем из объекта myNeighbour строковые данные в формате JSON
            Console.WriteLine(OurData);
            Console.ReadKey();
        }

Заметьте, что если вывести на экран OurData, который является JSON в строчном формате, мы увидим (барабанная дробь) все данные в одной строке. Это нормально! Однако некоторые парсеры (уже не помню какие) делают немного иначе - они вставляют \n и \t в нужных местах так, чтобы при выводе они были в "красивой печати" (канонизированном виде).

Вот что мы увидим, если запустим программу

Конец!

На этом всё! В следующей статье я покажу вам как преобразовать данные с JSON в класс с данными и JSONNode! (от SimpleJSON.cs) До скорого!