当前位置:首页 > 代码相关 > 正文内容

C#解析JSON

admin4年前 (2021-01-18)代码相关12354

首先使用nuget搜索json,如下图选择第一个包安装。

jsonnuget.jpg

然后引用命名空间 using Newtonsoft.Json;

以下面的JSON文件为例子解析:

{"page":1,"results":

[

 {

   "adult":false,

   "backdrop_path":"/k7h4RNAarfOrF2r2YMN0P2FQSr4.jpg",

   "genre_ids":[80,18,53,28],

   "id":75780,

   "original_language":"en",

   "original_title":"Jack Reacher",

   "overview":"  根据“英国惊悚小说天王”李查德的小说《完美嫌犯》改编。 六发子弹,五名死者,神秘枪手在闹市区制造了一起惨案让整个城市都陷入魁了恐慌。所有的证据都指向了前军队狙击手詹姆斯·巴尔(约瑟夫·斯科拉 Joseph Sikora 饰)。但他坚持自己的清白并要求把老相识 杰克·理查尔(汤姆·克鲁斯 Tom Cruise 饰)找来,两人曾同在军队中服役。随着杰克调查的深入,他发现了更大的谜团,炮制这场惨案的真凶似乎另有其人,而别有用心的幕后黑手抓走了巴尔 ,只留下杰克一人探明真相。   六发子弹中有一发漏空的子弹是杀手故意放空的。为了了解狙击手的工作,杰克特意来到了狙击手的训练营找到了一个叫做萨缪尔·卡什(罗伯特·杜瓦尔 Robert Duvall 饰)的教练。在卡什和巴尔妹妹以及律师的帮助下,杰克渐渐走进了事件的中心位置,一个关于苏联改造营和俄罗斯黑帮的秘密也慢慢浮出水面……",

   "popularity":24.634,

   "poster_path":"/jJX1yrIvT9cmvKb6vcoGiRdPxbD.jpg",

   "release_date":"2012-12-20","title":"侠探杰克",

   "video":false,

   "vote_average":6.5,

   "vote_count":5030

  },

  {

   "adult":false,

   "backdrop_path":"/ww1eIoywghjoMzRLRIcbJLuKnJH.jpg",

   "genre_ids":[28],

   "id":343611,

   "original_language":"en",

   "original_title":"Jack Reacher: Never Go Back",

   "overview":"  续集故事继续围绕杰克展开。他重回弗吉尼亚州的军事基地和苏珊·特纳少校会面,要解决一些个人问题。此时,特纳却意外被捕。杰克同时也陷入谜团,因为他被诬告犯有重罪,而且牵涉到一个自己完全不知道的小孩。这些,杰克都记不起来了。他要客服重重困难,去寻找特纳,最终解决问题。",

   "popularity":24.533,

   "poster_path":"/wxLUQ1pIms3HAlVGYvEG9zg2kDs.jpg",

   "release_date":"2016-10-19",

   "title":"侠探杰克:永不回头",

   "video":false,

   "vote_average":5.7,

   "vote_count":3419

  }

],

"total_pages":1,

"total_results":2

}


可以通过在线工具生成C#实体,例如下面这个网站:

https://www.sojson.com/json2csharp.html

生成的实体如下:

public class ResultsItem
{
    /// <summary>
    /// 
    /// </summary>
    public string adult { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string backdrop_path { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public List <int > genre_ids { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string original_language { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string original_title { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string overview { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public double popularity { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string poster_path { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string release_date { get; set; }
    /// <summary>
    /// 侠探杰克
    /// </summary>
    public string title { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string video { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public double vote_average { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int vote_count { get; set; }
}
 
public class Root
{
    /// <summary>
    /// 
    /// </summary>
    public int page { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public List <ResultsItem > results { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int total_pages { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int total_results { get; set; }
}

将上面的类复制到自己的程序中,main函数中可以下面这样简单使用:

string jsonText = "{"page":1,"results":[{"adult":false,"backdrop_path":"/k7h4RNAarfOrF2r2YMN0P2FQSr4.jpg","genre_ids":[80,18,53,28],"id":75780,"original_language":"en","original_title":"Jack Reacher","overview":"  根据“英国惊悚小说天王”李查德的小说《完美嫌犯》改编。\r 六发子弹,五名死者,神秘枪手在闹市区制造了一起惨案让整个城市都陷入魁了恐慌。所有的证据都指向了前军队狙击手詹姆斯·巴尔(约瑟夫·斯科拉 Joseph Sikora 饰)。但他坚持自己的清白并要求把老相识 杰克·理查尔(汤姆·克鲁斯 Tom Cruise 饰)找来,两人曾同在军队中服役。随着杰克调查的深入,他发现了更大的谜团,炮制这场惨案的真凶似乎另有其人,而别有用心的幕后黑手抓走了巴尔 ,只留下杰克一人探明真相。\r   六发子弹中有一发漏空的子弹是杀手故意放空的。为了了解狙击手的工作,杰克特意来到了狙击手的训练营找到了一个叫做萨缪尔·卡什(罗伯特·杜瓦尔 Robert Duvall 饰)的教练。在卡什和巴尔妹妹以及律师的帮助下,杰克渐渐走进了事件的中心位置,一个关于苏联改造营和俄罗斯黑帮的秘密也慢慢浮出水面……","popularity":24.634,"poster_path":"/jJX1yrIvT9cmvKb6vcoGiRdPxbD.jpg","release_date":"2012-12-20","title":"侠探杰克","video":false,"vote_average":6.5,"vote_count":5030},{"adult":false,"backdrop_path":"/ww1eIoywghjoMzRLRIcbJLuKnJH.jpg","genre_ids":[28],"id":343611,"original_language":"en","original_title":"Jack Reacher: Never Go Back","overview":"  续集故事继续围绕杰克展开。他重回弗吉尼亚州的军事基地和苏珊·特纳少校会面,要解决一些个人问题。此时,特纳却意外被捕。杰克同时也陷入谜团,因为他被诬告犯有重罪,而且牵涉到一个自己完全不知道的小孩。这些,杰克都记不起来了。他要客服重重困难,去寻找特纳,最终解决问题。","popularity":24.533,"poster_path":"/wxLUQ1pIms3HAlVGYvEG9zg2kDs.jpg","release_date":"2016-10-19","title":"侠探杰克:永不回头","video":false,"vote_average":5.7,"vote_count":3419}],"total_pages":1,"total_results":2}";

Root root = JsonConvert.DeserializeObject<Root>(jsonText);

Console.WriteLine(root.results[0].overview);

上面的json进行了压缩并转义,获取了result列表中的第一项。当然如果直接从文件中读取就不用这么麻烦了。

 

 

扫描二维码推送至手机访问。

版权声明:本文由lovedm.club发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=113

分享给朋友:

“C#解析JSON” 的相关文章

C# 泛型委托

C# 泛型委托

虽然没有必要,但是还是先看看自定义的泛型委托:namespace _20200402 {     class Program     {     &nb...

C# 与文件相关的几个类(1)

C# 与文件相关的几个类(1)

C# 与文件访问相关的常用的类:File类、Directory类、Path类、FileInfo类、DirectoryInfo类、FileSystemInfo类、FileSystemWatcher类以上几个类均在System.IO命名空间下。挨个说吧:File类:静态类,只有静态方法,用于移...

C# 使用FileStream进行文件复制操作

使用文件流进行操作,如下,其中注释部分是和非注释部分一样的,但是使用using语句是执行完后自动释放内存,而注释部分是手动释放。CopyFile方法中,缓冲区大小设为1024*1024字节,也就是1MB,Read方法和Write方法中,第一个参数都是缓冲区数组,第二个参数都是偏移量,这个量是在缓冲区...

C语言malloc()函数

C语言中malloc()函数,用于分配所需的内存,并返回一个指向该内存的指针。注意这是C的标准库函数,不是C的关键字,在<stdlib.h>头文件下。函数声明: void *malloc(size_t size)其中,size是要分配的内存的大小,单位是字节。返回一个指针 ,指向已分配大...

C、C++、C#交换变量

C、C++、C#交换变量

最近重新看了看C和C++,觉得有些地方挺有意思。作为一开始不管什么资料都会用来做例子的一个程序,交换变量。不管在哪,常用的int,float,double类型的变量都是值类型的,作为参数传到函数(方法)中时,其实是复制了一个值进去,也就是说通过函数是无法直接更改这些值的,只能通过一些间接的方法来更改...

C语言 异或运算符 ^

C语言中异或运算符^表示参见运算的二进制运算符相同为0,不同为1,如下:1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0下面举例说明∧运算符的应用:  (1)使特定位翻转  假设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算,...