Работаем с JSON в C#. Сериализация и десериализация
На сегодняшний день JSON входит в число основных форматов представления сложных структур и обмена данными. Поэтому все основные языки программирования имеют встроенную поддержку для работы с ним. C# не исключение.Сериализация в JSONСуществует два основных способа преобразования (сериализации) объектов .NET в JSON:
Использование класса DataContractJsonSerializerКласс DataContractJsonSerializer сериализует объекты .NET в поток (Stream) в виде текста в формате JSON или XML сопоставимый с JSON. Для того чтобы сериализация объекта стала возможна он должен быть отмечен атрибутом DataContract, а его члены подлежащие сериализации атрибутом DataMember. Чтобы эти атрибуты и сам класс DataContractJsonSerializer стали доступны, необходимо подключить к проекту сборку System.Runtime.Serialize. В качестве примера создадим класс, который описывает организацию.
Создадим объект класса DataContractJsonSerializer для сериализации объектов класса Company.
Обратите внимание. Сериализуемый тип передаётся в качестве параметра конструктора. Далее необходимо создать поток для сериализованных данных.
Или XmlWriter для XML сопоставимого с JSON. Например:
Сам процесс сериализации осуществляется с помощью метода WriteObject класса DataContractJsonSerializer. В качестве первого параметра ему передаётся либо поток, либо объект XmlWriter. В качестве второго параметра сериализуемый объект. В итоге получается или поток с текстом в формате JSON.
Или XML сопоставимый с JSON.
Использование класса jаvascriptSerializerКласс jаvascriptSerializer расположен в пространстве имён System.Web.Script.Serialization (требует подключения сборки System.Web.Extensions). Его отличительная особенность в том, что он сериализует объекты в JSON возвращая обычную строку (string) с текстом в формате JSON. При этом совершенно не требуется обозначать сериализуемый объект или его члены специальными атрибутами. Конструктор класса jаvascriptSerializer не требует передачи каких либо параметров, а для выполнения сериализации объект передаётся в качестве единственного параметра методу Serialize.
Десериализация из JSONДанные сериализованные в JSON можно получить обратно. Использование класса DataContractJsonSerializerДесериализация производится при помощи метода ReadObject. В качестве единственного параметра ему передаётся поток с текстом в формате JSON или объект XmlReader для чтения XML сопоставимого с JSON. При десериализации из потока необходимо установить указатель на позицию соответствующую началу данных в формате JSON (в простейшем случае это 0).
Если требуется десериализовать данные их XML сопоставимого с JSON, создаём XmlReader для этого XML (в данном примере XML хранится в файле) и передаём его в метод ReadObject класса DataContractJsonSerializer.
Использование класса jаvascriptSerializerДля десериализации у класса jаvascriptSerializer есть два метода:
Пример использования метода Deserialize:
Пример использования метода DeserializeObject:
Метод Deserialize выполняет простую десериализацию, восстанавливая из JSON исходный объект. Метод DeserializeObject возвращает коллекцию, структура которой соответствует структуре исходного JSON. Что даёт возможность работать с JSON как с обычной коллекцией C# извлекая из неё для последующей обработки лишь необходимые данные.
Таким образом, в зависимости от требований задачи, можно выбрать наиболее подходящее средство для работы с JSON. |
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.