Всем привет!
Так уж вышло, что я никогда особо не занимался десериализацией json'a, и считал, что с этим есть какой-то геморрой. То есть, оно работает, но для того, чтобы оно работало надо много где написать кучу всякого шаблонного кода. Поскольку подобных задач мне не прилетало, я и не парился до поры до времени. Однако, сегодня такая задача мне, всё-таки, прилетела. Вот наш герой, которого мне предстояло распотрошить:
Меня смущало, что ключи были с пробелами, и это, по моему мнению, могло вызвать затруднения при десериализации. Поэтому я подумал, что обойдусь без неё и быстренько разберусь с помощью стандартного функционала работы со строками. Сделаю Contains() строки, например "Product Name", определю индекс начала найденной строки, дальше найду индекс следующей запятой или символа "}", если запятой нет, далее сделаю Substring и дело в шляпе. В итоге родился монстр, который даже работал, но выглядел он, конечно, не очень. Позже, когда я показал код коллегам, мне подсказали простейший способ десериализации c помощью Newtonsoft.Json от простоты которого я просто офигел.
Для начала необходимо создать класс, описывающий наш объект:
Фишка в том, что если просто объявить переменную, то при десериализации в json'e будет производиться поиск ключа, который называется так же, как и переменная в классе. А поскольку в нашем тестовом json'e ключ содержал пробел, то данный способ бы не подошел, ведь невозможно создать переменную с пробелом в имени. Здесь на помощь приходит атрибут [JsonProperty()] , в котором можно задать любое название ключа, что и было сделано в примере кода выше.
После оставалось только вызвать JsonConvert.DeserializeObject<DeviceInfo>(jsonContent) и радоваться!
Ниже оставляю пример использования.
Надеюсь, кому-то это было полезно. Пишите в комментариях, если вам есть что об этом сказать.
Спасибо за внимание!
#C# #программирование #bestpractices