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

C#解析JSON

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

首先使用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://www.lovedm.club/?id=113

分享给朋友:

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

C#事件_Sample_1

事件模型的五个组成部分:1、事件的拥有者(event source,只能是对象或类)2、事件成员(event,成员)3、事件的响应者(event subscriber,对象)4、事件处理器(event handler,成员)--本质上是一个回调方法5、事件订阅--把事件...

C# 控制某句代码只执行一次

这两天用C#写了个2048游戏练手,在需求上如果最终达到了2048,那么应该给出一句提示或者弹出一个消息框,提示达到了2048,而且这个提示只需要展示一次,关闭提示后应该继续游戏而不会重复提示,可以使用bool类型的全局变量进行控制。如下:public partial class...

C# 正则表达式(1)

C# 正则表达式(1)

用于匹配输入文本的模式string s = "this is a test!"; string res = Regex.Replace(s, "^",&nbs...

C# 测量运行时间

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

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

Path类,处理文件或路径的类,是一个静态类。方法:PathChangeExtension(String, String)更改路径字符串的扩展名。返回值为string。Combine(String, String)将两个字符串组合成一个路径。GetDirectoryName(String)返回指定路...

C#(或者Java)反转数组

将原数组反转,如[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]反转后变为[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]因为数组是引用类型,所以直接在方法中处理即可,C#和Java写法一样,如下:      &nb...