Найти тему

Как быстро и просто десериализовать JSON в C#

Источник изображения: https://www.thecodebuzz.com/
Источник изображения: https://www.thecodebuzz.com/

Всем привет!

Так уж вышло, что я никогда особо не занимался десериализацией json'a, и считал, что с этим есть какой-то геморрой. То есть, оно работает, но для того, чтобы оно работало надо много где написать кучу всякого шаблонного кода. Поскольку подобных задач мне не прилетало, я и не парился до поры до времени. Однако, сегодня такая задача мне, всё-таки, прилетела. Вот наш герой, которого мне предстояло распотрошить:

Меня смущало, что ключи были с пробелами, и это, по моему мнению, могло вызвать затруднения при десериализации. Поэтому я подумал, что обойдусь без неё и быстренько разберусь с помощью стандартного функционала работы со строками. Сделаю Contains() строки, например "Product Name", определю индекс начала найденной строки, дальше найду индекс следующей запятой или символа "}", если запятой нет, далее сделаю Substring и дело в шляпе. В итоге родился монстр, который даже работал, но выглядел он, конечно, не очень. Позже, когда я показал код коллегам, мне подсказали простейший способ десериализации c помощью Newtonsoft.Json от простоты которого я просто офигел.

Для начала необходимо создать класс, описывающий наш объект:

Фишка в том, что если просто объявить переменную, то при десериализации в json'e будет производиться поиск ключа, который называется так же, как и переменная в классе. А поскольку в нашем тестовом json'e ключ содержал пробел, то данный способ бы не подошел, ведь невозможно создать переменную с пробелом в имени. Здесь на помощь приходит атрибут [JsonProperty()] , в котором можно задать любое название ключа, что и было сделано в примере кода выше.

После оставалось только вызвать JsonConvert.DeserializeObject<DeviceInfo>(jsonContent) и радоваться!

Ниже оставляю пример использования.

Надеюсь, кому-то это было полезно. Пишите в комментариях, если вам есть что об этом сказать.

Спасибо за внимание!

#C# #программирование #bestpractices