Принципы работы со строками JSON в Windows Phone

OSzone.net » Microsoft » Разработка приложений » Windows Phone » Принципы работы со строками JSON в Windows Phone
Иcточник: msdn.microsoft.com
Опубликована: 05.03.2015

Большинство мобильных приложений должны уметь подключаться к внешним сервисам (существующим (Twitter, Facebook и др.) или новым, которые разработчику также предстоит реализовать). Один из наиболее распространенных методов работы со структурированными данными в коде программы подразумевает использование формата JSON.  JSON(JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript. Этот формат максимально доступен для чтения и анализа человеком или компьютером. JSON основан на двух следующих структурах данных:

Объекты JSON

Набор записей значений ключей, где каждое значение может быть примитивным типом или другой структурой JSON.

{
 Name : "Marcos",
 Address : {
   Street : "Marcos' street",
   Country : "Brazil",
   City : "Campina Grande"
 }
}

Массивы JSON

Список структур JSON (массивы или объекты JSON).

[
 {
   Name : "Marcos",
   Country : "Brazil"
 },
 {
   Name : "John",
   Country : "England"
 }
]

Для работы со строками JSON подходит множество библиотек. Эти библиотеки умеют преобразовывать строки JSON в переменные и наоборот, что делает возможным и значительно упрощает взаимодействие с внешними сервисами, использующими этот формат для обмена данными. В этой статье мы рассмотрим библиотеку Json.NET и познакомимся с принципами сериализации (конвертирования объектов C# в строки JSON), десериализации (конвертирования строк JSON в объекты C#) и поиска внутри структур JSON.

Установка библиотеки Json.NET

Библиотека Json.NET доступна в виде пакета Nuget, поэтому установить ее очень просто: щелкните по своему проекту правой кнопкой мыши и выберите Manage NuGet Packages... (Управление пакетами NuGet), введите «json.net» в поле поиска и щелкните Install (Установить).

*
Увеличить

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

Как уже было сказано ранее, десериализация (или парсинг) используется, чтобы получить структуру JSON (в виде строки) и преобразовать ее в переменные, которые можно использовать в вашем проекте.

Парсинг массива JSON

using Newtonsoft.Json.Linq;

public void ParseArray() {
  string jsonArrayAsString = "[ { Name : \"Marcos\", Country : \"Brazil\" },
  { Name : \"John\", Country : \"England\" }]";
  JArray jsonArray = JArray.Parse(jsonArrayAsString);
  JToken jsonArray_Item = jsonArray.First;
  while (jsonArray_Item != null)
  {
    string name = jsonArray_Item.Value<string>("Name");
    string country = jsonArray_Item.Value<string>("Country");
    //Be careful, you take the next from the current item, not from the JArray object.
    jsonArray_Item = jsonArray_Item.Next;
  }
}

Парсинг объекта JSON

using Newtonsoft.Json.Linq;

public void ParseObject()
{
  string jsonObjectAsString = "{ Name : \"Marcos\", Country : \"Brazil\" }";
  JObject jsonObject = JObject.Parse(jsonObjectAsString);
  string name = jsonObject.Value<string>("Name");
  string country = jsonObject.Value<string>("Country");
}

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

Сериализация используется для получения переменных C# и преобразования их в строку JSON.

Сериализация массива

public string StringifyArray(string[] names, string[] countries)
{
  JArray jsonArray = new JArray();
  for (int i = 0; i < names.Length; i++)
  {
    JObject jsonObject = new JObject();
    jsonObject["Name"] = names[i];
    jsonObject["Country"] = countries[i];
    jsonArray.Add(jsonObject);
  }
  return jsonArray.ToString();
}

Сериализация объекта

public string StringifyObject(string name, string country)
{
  JObject jsonObject = new JObject();
  jsonObject["Name"] = name;
  jsonObject["Country"] = country;
  return jsonObject.ToString();
}

Поиск

На данном этапе вы могли подумать, что библиотека Json.NET подходит только для сериализации и десериализации объектов JSON, но не для поиска внутри этих объектов. Это не так. Для поиска в структурах JSON предусмотрены два прекрасных метода: SelectToken и SelectTokens. Вот пример:

public void Search()
{
  string jsonObjectAsString = "{ Name : \"Marcos\", Country : \"Brazil\",
  Friends : [ {Name : \"John\", Country : \"England\"} , {Name : \"Chan\", Country : \"China\"} ] }";
  JObject jsonObject = JObject.Parse(jsonObjectAsString);
  List<JToken> friendCountries = jsonObject.SelectTokens("Friends[*].Country").ToList();
  for (int i = 0; i < friendCountries.Count; i++)
  {
    System.Diagnostics.Debug.WriteLine(friendCountries[i].ToString());
  }
}

Обратите внимание на параметр SelectTokens. Главная его задача — получить значение из поля Country (Страна) каждого друга пользователя Marcos. Параметр SelectTokens представляет собой выражение JPath. Выражения JPath — мощный инструмент для организации поиска в структурах JSON.

Несколько примеров выражений JPath:

Разница между SelectToken и SelectTokens заключается в том, что в первом случае возвращается только один результат. SelectToken сгенерирует исключение, если выражение JPath вернет больше одного результата.

Подробнее о выражениях JPath  можно узнать здесь.


Ссылка: http://www.oszone.net/26608/JSON