C#如何簡單快速的解析復(fù)雜的JSON格式接口數(shù)據(jù)
一、 背景介紹
之前有個(gè)碰到一個(gè)學(xué)員問阿笨老師,說他現(xiàn)在工作內(nèi)容是對外對接第三方API接口,但是文檔中有大量的接口是一大堆復(fù)雜的JSON格式的字符串(比如:有單個(gè)對象,有數(shù)組對象,還有多層嵌套對象等等,他說不會(huì)解析為C#對象,問能不能幫助一下他,教他一下以后如何碰到這類復(fù)雜的JSON格式都會(huì)進(jìn)行解析。俗話說的好:授人以魚不如授人以漁!希望這么一點(diǎn)小技能能夠幫助到有需要的同學(xué)哈。
二、提出問題
一般API接口都會(huì)有一個(gè)自己定義的標(biāo)準(zhǔn)的響應(yīng)的數(shù)據(jù)格式,比如這位同學(xué)對接的API接口數(shù)據(jù)格式說明(如下圖),從圖中我們可以看到code節(jié)點(diǎn)和message節(jié)點(diǎn)是固定響應(yīng)頭,唯一變化的是data節(jié)點(diǎn)。那么大家有沒有想到變化的類型在C#中我們可以用什么類型進(jìn)行替代呢?答案想必大家都知道,那就是泛型T。

二、分析問題
先來一個(gè)簡單一點(diǎn)的JSON格式:

再來稍微一點(diǎn)復(fù)雜的JSON格式

如果接口字段少一點(diǎn)的話,我們還可以JSON節(jié)點(diǎn)通過手動(dòng)進(jìn)行Mapping映射為C#實(shí)體對象屬性。那么如果接口字段比較多,數(shù)據(jù)類型比較復(fù)雜,而且層級嵌套比較深的話,有沒有簡單快速的方式進(jìn)行自動(dòng)化的方式自動(dòng)生成Mapping映射我們想要的C#實(shí)體對象呢?答案:是肯定的?。?!接下來阿笨將給大家推薦幾種方式,敬請拭目以待。
三、解決問題
1)、在線json生成C#實(shí)體工具類,這里阿笨推薦下面兩款
http://www.jsons.cn/jsontomodel/
http://www.bejson.com/convert/json2csharp
使用方式很簡單,復(fù)制JSON格式字符串,直接點(diǎn)擊生成C#實(shí)體對象類。

2)、VS2019自動(dòng)格式轉(zhuǎn)換。
1、復(fù)制你要轉(zhuǎn)換的JSON格式字符串。(記住一定要先復(fù)制自己想要轉(zhuǎn)換的JSON格式字符串哦)
2、打開VS2019(其他低版本VS版本阿笨沒測試,自己去試一下哦),找到【編輯】-【選擇性粘貼】-【將JSON粘貼為類】

所有的工具都不是萬能的,轉(zhuǎn)換后的格式需要自己驗(yàn)證一下是否合理哦。不過大家放心,大部分的JSON類型的字符串類型都可以做到一鍵生成。哈哈,有點(diǎn)類似代碼生成器的感覺,太爽了。
四、嘮叨了這么多,阿笨快來上干貨
給大家寫了幾個(gè)示例DEMO,只要能夠掌握這幾個(gè)示例,以后解析任何復(fù)雜類型的JSON字符串都沒有障礙了。
核心的一句話是:json字符串反序列化為C#對象,C#對象序列化為JSON字符串。
示例一:簡單格式的JSO你字符串:

示例二:稍微復(fù)雜一點(diǎn)的字符串

示例三:Dictionary<string, object> 轉(zhuǎn)JSON字符串

示例四:數(shù)組[] 轉(zhuǎn)JSON字符串

示例五:集合轉(zhuǎn)JSON數(shù)組
JSON代碼:
{
"ids":[1,2,3]
}
對應(yīng)的生成C#代碼
public class OrderInfo
{
public List<int> ids { get; set; }
}

五、源代碼示例下載
非常感謝對【跟著阿笨一起玩NET】的支持,有問題微信公眾號(hào)回復(fù)wx關(guān)鍵字,加阿笨的個(gè)人微信號(hào)。
鏈接:https://pan.baidu.com/s/1R1TRR2c2c114b_FoniC7Rw
提取碼:qfxt
騰訊課堂
網(wǎng)易云課堂
