Вам понадобится

Для разработки под Windows вам понадобиться следующее ПО:

Пробная версия Windows 10

Попробуйте новейшую версию ОС.

Visual Studio

Visual Studio — это интегрированная среда разработки с широкими возможностями для создания потрясающих приложений для Windows, Android и iOS, а также современных веб-приложений и облачных служб.

Microsoft .NET Framework 4.6

Пакет многоплатформенного нацеливания .NET Framework 4.6 позволяет разработчикам создавать приложения для .NET Framework 4.6, используя Visual Studio или сторонние IDE.

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

Из этой статьи вы узнаете, как работать со строками JSON (выполнять сериализацию и десериализацию) с использованием библиотеки  Json.NET.

Введение

Большинство мобильных приложений должны уметь подключаться к внешним сервисам (существующим (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:

  • Friends[?(@.Name=='John')].Country — получаем название страны, указанное каждым другом пользователя John.
  • Friends[0].Country — получаем название страны, указанное первым другом.
  • Friends[:2] — получаем названия стран, указанные первыми двумя друзьями из списка.

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

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