Как манипулировать и использовать JSON с C # и WinForms

Многие люди используют в Интернете JSON, а не XML, по многим причинам:

  • JSON требует меньше тегов, чем XML — элементы XML должны быть обернуты в открытые и закрытые теги, тогда как JSON вы просто называете тег один раз.
  • JSON лучше помогает процедурным решениям в вашем JavaScript на основе объектов и их значений (или методов).
  • JSON легче читать, чем XML (по меньшей мере, для многих разработчиков).
  • JSON — упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.
  • Между многими другими …

Поэтому, если веб-служба решит (я действительно в этом сомневаюсь) предложить услугу только в формате JSON, вы будете на некоторое время застревать, если не знаете, как правильно обрабатывать данные JSON с помощью C #.

Из этой статьи вы узнаете, как манипулировать JSON с использованием библиотеки JSON.NET всеми способами (чтение, сериализация, десериализация и т. Д.) В формах Windows.

Требования

  • Visual Studio с диспетчером пакетов NuGet (> = 2010).

Установка JSON.NET

Продолжайте создавать приложение Winforms, как вы обычно делаете это для последней версии .NET Framework. Теперь после создания мы собираемся добавить JSON.NET библиотека как зависимость в нашем проекте.

JSON.NET является высокопроизводительной средой JSON для платформы .NET, она позволяет сериализовать и десериализовать любой объект .NET с помощью мощного сериализатора JSON JSON.

Зачем использовать библиотеку JSON.NET?

  • Json.NET делает простое легким, а сложное возможным.
  • Создавайте, анализируйте, запрашивайте и изменяйте JSON, используя объекты Json.NET JObject, JArray и JValue.
  • Json.NET поддерживает Windows, Windows Store, Windows Phone, Mono и Xamarin.
  • Json.NET — это программное обеспечение с открытым исходным кодом и полностью бесплатное для коммерческого использования.
  • На 50% быстрее, чем DataContractJsonSerializer, и на 250% быстрее, чем JavaScriptSerializer.

Поскольку библиотека имеет высокую производительность, см. Следующую таблицу, в которой сравнивается производительность JSON.NET между другими известными библиотеками:

Сравнение производительности JSON.NET.

Для установки щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите Manage NuGet Packages,

Менеджер пакетов самородков CefSharp

Когда появится меню поиска, введите JSON.NET выберите дистрибутив WinForms и установите его.

Как и в каждой версии Visual Studio, интерфейс может различаться, просто обязательно установите дистрибутив Newtonsoft.Json от The James Newton-King, расположенный в исходном коде пакета nuget.org, в этом примере мы используем Visual Studio 2015.

Менеджер пакетов Json.NET NuGet

Следуйте настройке установки (примите условия и установите). Во время установки вы должны увидеть соответствующую информацию о процессе в консоли:

Attempting to gather dependency information for package 'Newtonsoft.Json.8.0.3' with respect to project 'UniversalSandbox', targeting '.NETFramework,Version=v4.5.2'
Attempting to resolve dependencies for package 'Newtonsoft.Json.8.0.3' with DependencyBehavior 'Lowest'
Resolving actions to install package 'Newtonsoft.Json.8.0.3'
Resolved actions to install package 'Newtonsoft.Json.8.0.3'
GET https://api.nuget.org/packages/newtonsoft.json.8.0.3.nupkg
OK https://api.nuget.org/packages/newtonsoft.json.8.0.3.nupkg 27ms
Installing Newtonsoft.Json 8.0.3.
Adding package 'Newtonsoft.Json.8.0.3' to folder 'F:\C# Development\Winform projects\UniversalSandbox\packages'
Added package 'Newtonsoft.Json.8.0.3' to folder 'F:\C# Development\Winform projects\UniversalSandbox\packages'
Added package 'Newtonsoft.Json.8.0.3' to 'packages.config'
Executing script file 'F:\C# Development\Winform projects\UniversalSandbox\packages\Newtonsoft.Json.8.0.3\tools\install.ps1'...
Successfully installed 'Newtonsoft.Json 8.0.3' to UniversalSandbox
========== Finished ==========

Теперь вы сможете легко использовать Json.NET в своем проекте.

Использование JSON.NET

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

using Newtonsoft.Json;

Теперь посмотрим на коллекцию основных примеров манипулирования JSON с помощью C # (Serialize и Deserialize):

Читать JSON

Прочитайте строку JSON, как если бы вы использовали XML-файлы, используя JsonTextReader а также StringReader (базовое чтение).

using Newtonsoft.Json;
using System.IO;
string json = @"{
'CPU': 'Intel',
'PSU': '500W',
'Drives': [
'DVD read/writer'
/*(broken)*/,
'500 gigabyte hard drive',
'200 gigabype hard drive'
]
}";
JsonTextReader reader = new JsonTextReader(new StringReader(json));
while (reader.Read())
{
if (reader.Value != null)
{
Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
}
else
{
Console.WriteLine("Token: {0}", reader.TokenType);
}
}
// Token: StartObject
// Token: PropertyName, Value: CPU
// Token: String, Value: Intel
// Token: PropertyName, Value: PSU
// Token: String, Value: 500W
// Token: PropertyName, Value: Drives
// Token: StartArray
// Token: String, Value: DVD read/writer
// Token: Comment, Value: (broken)
// Token: String, Value: 500 gigabyte hard drive
// Token: String, Value: 200 gigabype hard drive
// Token: EndArray
// Token: EndObject

Сериализация динамического объекта (ExpandoObject) в JSON

Нет ничего лучше, чем работать с объектами Javascript — это приятный опыт, поскольку они очень динамичны и позволяют вам делать и сохранять любые вещи. Но что было бы лучше для разработчика Javascript, который работает с динамическими объектами в c #?

Следующий пример наиболее похож на написание JavaScript в C # с использованием ExpandoObject которые позволяют вам добавлять динамические свойства к объекту, как это делает javascript.

Замечания: Сериализация поддерживает практически любой тип объекта, а не только тип расширения.

using System.Dynamic;
dynamic myObject = new ExpandoObject();
myObject.name = "Our Code World";
myObject.website = "http://site.com";
myObject.language = "en-US";
List articles = new List();
articles.Add("How to manipulate JSON with C#");
articles.Add("Top 5: Best jQuery schedulers");
articles.Add("Another article title here ...");
myObject.articles = articles;
string json = JsonConvert.SerializeObject(myObject);
Console.WriteLine(json);
//{
//   "name":"Our Code World",
//   "website":"http://site.com",
//   "language":"en-US",
//   "articles":[
//      "How to manipulate JSON with C#",
//      "Top 5: Best jQuery schedulers",
//      "Another article title here ..."
//   ]
//}

Десериализовать строку JSON в частичный класс

Вы можете прочитать строку JSON и проанализировать ее в существующий класс c # вместо чтения свойства по свойству. Использовать DeserializeObject метод.

Класс в этом случае будет называться SearchResult и имеет следующую структуру:

public class SearchResult
{
public string Title { get; set; }
public string Content { get; set; }
public string Url { get; set; }
}

Теперь код для обработки должен выглядеть так:

using Newtonsoft.Json.Linq;
string googleSearchText = @"{
'responseData': {
'results': [
{
'GsearchResultClass': 'GwebSearch',
'unescapedUrl': 'http://en.wikipedia.org/wiki/Paris_Hilton',
'url': 'http://en.wikipedia.org/wiki/Paris_Hilton',
'visibleUrl': 'en.wikipedia.org',
'cacheUrl': 'http://www.google.com/search?q=cache:TwrPfhd22hYJ:en.wikipedia.org',
'title': 'Paris Hilton - Wikipedia, the free encyclopedia',
'titleNoFormatting': 'Paris Hilton - Wikipedia, the free encyclopedia',
'content': '[1] In 2006, she released her debut album...'
},
{
'GsearchResultClass': 'GwebSearch',
'unescapedUrl': 'http://www.imdb.com/name/nm0385296/',
'url': 'http://www.imdb.com/name/nm0385296/',
'visibleUrl': 'www.imdb.com',
'cacheUrl': 'http://www.google.com/search?q=cache:1i34KkqnsooJ:www.imdb.com',
'title': 'Paris Hilton',
'titleNoFormatting': 'Paris Hilton',
'content': 'Self: Zoolander. Socialite Paris Hilton...'
}
],
'cursor': {
'pages': [
{
'start': '0',
'label': 1
},
{
'start': '4',
'label': 2
},
{
'start': '8',
'label': 3
},
{
'start': '12',
'label': 4
}
],
'estimatedResultCount': '59600000',
'currentPageIndex': 0,
'moreResultsUrl': 'http://www.google.com/search?oe=utf8&ie=utf8...'
}
},
'responseDetails': null,
'responseStatus': 200
}";
JObject googleSearch = JObject.Parse(googleSearchText);
// get JSON result objects into a list
IList results = googleSearch["responseData"]["results"].Children().ToList();
// serialize JSON results into .NET objects
IList searchResults = new List();
foreach (JToken result in results)
{
SearchResult searchResult = JsonConvert.DeserializeObject(result.ToString());
searchResults.Add(searchResult);
}
// List the properties of the searchResults IList
foreach (SearchResult item in searchResults)
{
Console.WriteLine(item.Title);
Console.WriteLine(item.Content);
Console.WriteLine(item.Url);
}
// Title = Paris Hilton - Wikipedia, the free encyclopedia
// Content = [1] In 2006, she released her debut album...
// Url = http://en.wikipedia.org/wiki/Paris_Hilton
// Title = Paris Hilton
// Content = Self: Zoolander. Socialite Paris Hilton...
// Url = http://www.imdb.com/name/nm0385296/

Вы можете прочитать больше примеров, посетив официальную документацию здесь. Повеселись

Ссылка на основную публикацию
Adblock
detector