Работа с JSON, XML, сжатие данных
Цель работы: освоить технологию работы с форматами JSON и XML и работу со сжатием данных
JSON, XML, сжатие данных
Данные, которые передаются между веб-сервисом и клиентским приложением, кодируют с использованием определенных форматов. Существует множество таких форматов. Например, в ответ на запрос загрузки веб-страницы с веб-сервера могут поступить данные в формате HTML. При работе с API веб-сервисов обычно используются другие форматы, среди них наиболее распространены JSON (Java Script Object Notation) и XML (eXtensible Markup Language). Эти форматы могут использоваться и в задачах, которые не связаны с веб-службами. Например, в XML или JSON могут быть сериализованы объекты (при условии возможности сериализации), состояние которых нужно сохранить в постоянной памяти и загрузить, десериализовав, при очередном запуске приложения.
Как мы увидим ниже, JSON и XML имеют определенные особенности, которые можно учитывать, принимая решение об использовании того или иного формата. С их помощью можно закодировать одни и те же данные, существенная разница между ними будет заключаться в размере полученных данных и в удобстве восприятия данных человеком (нужно обычно при отладке). Ниже мы рассмотрим эти характеристики на практике.
С вопросами передачи и хранения данных тесно связана тема сжатия данных. Сжатие позволяет особым образом обработать данные, получив их представление, имеющее меньший размер, чем исходные данные, но содержащее ту же информацию. В данном случае речь идёт о так называемом сжатии информации без потерь, такое сжатие применимо, например, к документам (или к любым другим данным), когда критически важно точное соответствие данных, хранящихся в исходном документе тем данным, которые получены из сжатой копии документа. Среди алгоритмов сжатия без потерь можно отметить, например, алгоритм .ZIP.
Существует и так называемое сжатие с потерями – оно используется в тех случаях, когда отбрасывание некоторой части информации не ухудшает (или ухудшает незначительно) возможности по работе с информацией. Взамен потери некоторой части информации мы получаем очень большие уровни сжатия. Такое сжатие используется для кодирования изображений (.JPG), звуковых файлов (.MP3), видеофайлов.
Работа с JSON, XML, сжатие данных
Создадим учебное приложение (P7_1), которое демонстрирует работу с JSON, XML и основы работы со сжатыми данными. Воспользуемся шаблоном Приложение Windows Phone. Добавим в приложение новый класс, назовём его ForSerialization и опишем в нём следующие поля и конструктор (Листинг 27.1.)
using System; namespace P7_1 { public class ForSerialization { //Открытые поля public string Line1; public int Number1; public int[] IntArray; public ForSerialization() { //Инициализация полей Line1 = "Пример строки"; Number1 = 123; IntArray = new int[10]; Random r = new Random(); for (int i = 0; i < 10; i++) { IntArray[i] = r.Next() - r.Next(); } } } }Листинг 27.1. Код класса ForSerialization
Класс объявлен как общедоступный, это нужно для сериализации, в нём объявлено несколько открытых полей, одно из которых – строка, другое – число, третье поле – это массив, в который мы добавляем десять случайных чисел в конструкторе класса, там же мы инициализируем два других поля.
На главной странице приложения, рис. 27.1., разместим три кнопки. Мы будем размещать код, демонстрирующий интересующие нас техники работы, в обработчиках их событий Click.
Кроме того, обратите внимание на состав папки References проекта. Здесь мы используем библиотеку Ionic.Zlib для демонстрации работы со сжатыми данными. Существуют и другие библиотеки, подходящие для тех же целей.