Работаем с JSON в .NET Core (C#). Сериализация и десериализация

Ранее мы уже рассматривали работу с JSON в C# применительно к .NET Framework. Однако время не стоит на месте и на смену .NET Framework пришла .NET Core, которая окончательно вытеснила его в .NET 5. Но, в случае .NET Core старые проверенные приёмы работают не всегда. Как работать с JSON в .NET Core?

На самом деле существует три способа.

DataContractJsonSerializer

Первый из них – класс DataContractJsonSerializer. Этот класс перешёл в .NET Core из .NET Framework и работа с ним была уже достаточно подробно описана ранее. Поэтому не станем повторяться.

Сторонние библиотеки

Второй вариант – это использование сторонних библиотек. Например, Newtonsoft.Json.

Возьмём тот же класс, что и в предыдущей статье.

Создадим его экземпляр:

Далее при помощи метода SerializeObject класса JsonConvert мы можем получить данный объект в виде JSON строки.

Переменная jsonString в данном случае будет содержать следующее значение.

Также имеется возможность получить (десериализовать) JSON строку в исходный объект при помощи обобщённого метода DeserializeObject.

Это далеко не весь функционал, который может предложить данная библиотека, но для большинства операций вполне достаточно и этого.

JsonSerializer

Класс JsonSerializer появился в .NET Core 3 (пространство имён System.Text.Json). Реализация сериализации и десериализации JSON с его помощью по лёгкости вполне сопоставима с Newtonsoft.Json.

Перепишем предыдущие примеры с использованием JsonSerializer.

Сериализация:

Десериализация:

Однако в отличие от Newtonsoft.Json JsonSerializer не только требует указания типа при сериализации, но и по умолчанию экранирует строки.

Чтобы отключить экранирование необходимо создать объект JsonSerializerOptions с соответствующими настройками и передать его в качестве параметра в метод Serialize.

В случае десериализации экранирование строк уже не критично. Во всяком случае, если используется Encoder по умолчанию. Однако других значений кроме как Default и UnsafeRelaxedJsonEscaping, который, собственно, и отключает экранирование даже в .NET 5 не предусмотрено.

Интересная особенность класса JsonSerializerOptions – возможность автоматически форматировать JSON строку при сериализации. За это отвечает свойство WriteIndented. Если оно имеет значение true (по умолчанию false) то вместо стандартного отображения в одну строку JSON будет выведен на экран в гораздо более читабельном виде.

Пример:

Вывод на экран консоли (как пример).

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

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