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

C#解析JSON

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

首先使用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发布,如需转载请注明出处。

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

分享给朋友:

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

C# Lambda表达式

简单用法,一句一句来,便于理解 Func<int, int, int> func = new Func<int, int, int>((int a, int b) => { return a * b; });(int a, int b) => { ret...

C# 测量运行时间

使用Stopwatch类进行运行时间的监测要使用 System.Diagnostics 命名空间方法表 4Reset()停止时间间隔测量,并将运行时间重置为零。Restart()停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。Start()开始或继续测量某个时间间隔的运行时间。...

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

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

C# 抽象类与接口的比较

相同:都不能被实例化都包含未实现的方法派生类必须实现未实现的方法不同:抽象类可以包含抽象成员,也可以包含非抽象成员,即抽象类可以是完全实现的,也可以是部分实现的,或者是完全不实现的。接口更像是只包含抽象成员的抽象类,或者说接口内的成员都是未被实现的。一个类只能继承一个抽象类(当然其它类也一样),但是...

C# 通过事件传递参数

C# 通过事件传递参数

20200622气死我了,一开始写的很详细,提交的时候因为长时间未操作提交失败了,今天懒得再写了,只把代码贴出来算了。事件发布相关类:public class ProEventArgs : EventArgs {    &nb...

C语言qsort简单使用

qsort函数位于stdlib.h头文件里。是用来排序的函数,函数原型如下:void qsort(void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *));四个参数:ptr:指向待排序数组的指针cou...