如何在C#和WinForms中操作和使用JSON

本文概述

  • 要求
  • 安装JSON.NET
  • 使用JSON.NET
由于许多原因, 许多人在网络上使用JSON而不是XML:
  • JSON比XML所需的标签少-XML项必须包装在打开和关闭标签中, 而JSON仅将标签命名一次。
  • JSON更好地帮助基于对象及其值(或方法)的JavaScript中的过程决策。
  • JSON比XML更易于阅读(对于许多开发人员而言, 这种情况更少)。
  • JSON是值的有序列表。在大多数语言中, 这被实现为数组, 向量, 列表或序列。
  • 之间更多…
因此, 如果Web服务决定(我真的对此表示怀疑)仅提供JSON格式的服务, 那么如果你不知道如何使用C#正确处理JSON数据, 你将被困一阵子。
在本文中学习如何在Windows窗体中使用JSON.NET库以所有方式(读取, 序列化, 反序列化等)来操纵JSON。
要求
  • 带NuGet软件包管理器的Visual Studio(> = 2010)。
安装JSON.NET 像往常一样继续创建Winforms应用程序, 并以.NET Framework的最新版本为目标。现在, 在创建之后, 我们将在项目中添加JSON.NET库作为依赖项。
JSON.NET是用于.NET平台的高性能JSON框架, 它允许你使用Json.NET强大的JSON序列化程序对任何.NET对象进行序列化和反序列化。
为什么要使用JSON.NET库?
  • Json.NET使简单变得容易, 复杂变得可能。
  • 使用Json.NET的JObject, JArray和JValue对象创建, 解析, 查询和修改JSON。
  • Json.NET支持Windows, Windows Store, Windows Phone, Mono和Xamarin。
  • Json.NET是开源软件, 完全免费用于商业用途。
  • 比DataContractJsonSerializer快50%, 比JavaScriptSerializer快250%。
由于该库具有高性能, 请参阅下表比较其他已知库之间的JSON.NET性能:
如何在C#和WinForms中操作和使用JSON

文章图片
要安装, 请在解决方案资源管理器中右键单击你的项目, 然后选择” 管理NuGet软件包” 。
如何在C#和WinForms中操作和使用JSON

文章图片
【如何在C#和WinForms中操作和使用JSON】当出现搜索菜单时, 键入JSON.NET, 选择WinForms发行版并安装它。
与Visual Studio的每个版本一样, 界面可能有所不同, 只需确保安装位于nuget.org包源中的The Newton.Json by the James Newton-King发行版, 在此示例中, 我们使用的是Visual Studio 2015。
如何在C#和WinForms中操作和使用JSON

文章图片
请遵循安装设置(接受条款并进行安装)。在安装过程中, 你应该在控制台中看到有关该过程的相关信息:
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.nupkgOK https://api.nuget.org/packages/newtonsoft.json.8.0.3.nupkg 27msInstalling 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 主要的, 不要忘记在处理JSON的类中包含相应的use语句。
using Newtonsoft.Json;

现在看到用C#进行JSON操作的基本示例集合(序列化和反序列化):
读取JSON
就像使用XML文件使用JsonTextReader和StringReader(基本阅读)那样, 读取JSON字符串。
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对象更好的了, 这是一种令人愉快的体验, 因为它们非常灵敏, 可以让你做任何事情并保存。但是, 对于使用c#中的动态对象的Javascript开发人员来说, 哪个更好?
以下示例与使用ExpandoObject用C#编写javascript最为相似, 该示例允许你像javascript一样向对象添加动态属性。
注意:序列化支持几乎所有类型的对象, 不仅支持expando类型。
using System.Dynamic; dynamic myObject = new ExpandoObject(); myObject.name = "Our Code World"; myObject.website = "http://ourcodeworld.com"; myObject.language = "en-US"; List< string> articles = new List< string> (); 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://ourcodeworld.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': '< b> Paris Hilton< /b> - 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': '< b> Paris Hilton< /b> ', 'titleNoFormatting': 'Paris Hilton', 'content': 'Self: Zoolander. Socialite < b> Paris Hilton< /b> ...' }], '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 listIList< JToken> results = googleSearch["responseData"]["results"].Children().ToList(); // serialize JSON results into .NET objectsIList< SearchResult> searchResults = new List< SearchResult> (); foreach (JToken result in results){SearchResult searchResult = JsonConvert.DeserializeObject< SearchResult> (result.ToString()); searchResults.Add(searchResult); }// List the properties of the searchResults IListforeach (SearchResult item in searchResults){ Console.WriteLine(item.Title); Console.WriteLine(item.Content); Console.WriteLine(item.Url); }// Title = < b> Paris Hilton< /b> - Wikipedia, the free encyclopedia// Content = [1] In 2006, she released her debut album...// Url = http://en.wikipedia.org/wiki/Paris_Hilton// Title = < b> Paris Hilton< /b> // Content = Self: Zoolander. Socialite < b> Paris Hilton< /b> ...// Url = http://www.imdb.com/name/nm0385296/

你可以在此处阅读更多示例以访问官方文档。玩得开心

    推荐阅读