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

C#解析JSON

admin5年前 (2021-01-18)代码相关12558

首先使用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” 的相关文章

递归计算1到x的和

递归真是个神奇的东西,当时学C的时候就没搞明白,学C#又遇到例子了。        public int SumXTo1(int x)     &n...

C# 正则表达式(2)

// pattan = @"[^ahou]"; 表示匹配除ahou之外的字符,^在表示反义 string res4 = Regex.Replace(s, @"[^ahou]",&...

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

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

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

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

偶然想到的一个问题。。。

偶然想到的一个问题。。。

今天突然想C#中,用数组中的Max()方法和直接通过比较获取最大值的时间谁快,于是试了试:       static void Main(string[] args)   &nb...

PIE二次开发 加载栅格数据

1、获得栅格数据集路径2、打开栅格数据集3、创建栅格图层4、将数据添加到图层并刷新要添加两个引用:using PIE.DataSource;using PIE.Carto;// 获得要打开栅格数据的路径 OpenFileDialog file = new&n...