C# SimpleJSON字典反序列化實(shí)戰(zhàn)教程
C# 解析JSON道路千萬條,其中最流行的還是由Newtonsoft出品的Json.NET,只需要將Json的結(jié)構(gòu)做成C#的class,即可實(shí)現(xiàn)完美的序列化和反序列化。更重要的是它還支持LINQ。
Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Sizes = new string[] { "Small" }; string json = JsonConvert.SerializeObject(product); // { // "Name": "Apple", // "Expiry": "2008-12-28T00:00:00", // "Sizes": [ // "Small" // ] // }
string json = @"{ 'Name': 'Bad Boys', 'ReleaseDate': '1995-4-7T00:00:00', 'Genres': [ 'Action', 'Comedy' ] }"; Movie m = JsonConvert.DeserializeObject<Movie>(json); string name = m.Name; // Bad Boys
JArray array = new JArray(); array.Add("Manual text"); array.Add(new DateTime(2000, 5, 23)); JObject o = new JObject(); o["MyArray"] = array; string json = o.ToString(); // { // "MyArray": [ // "Manual text", // "2000-05-23T00:00:00" // ] // }
但也不妨有同志因?yàn)?strong>SDK大小等種種原因?qū)で笠粋€(gè)輕量替代方案,SimpleJSON就是其中一個(gè)選擇,只用一個(gè)C#腳本就干完了JSON解析的事兒。
SimpleJSON的用法很簡單,(當(dāng)然老規(guī)矩,還得是基于我的一個(gè)開源項(xiàng)目來講,歡迎點(diǎn)個(gè)star)先讀出來json字符串,然后用JSONNode.Parse(你的字符串)即可獲得反序列化JSON文件后的根節(jié)點(diǎn)。
public static void Initialize() { Configuration = JSONNode.Parse(File.ReadAllText("appsettings.json")); }
如上面代碼所示,我的json字符串在一個(gè)叫appsettings.json文件里,文件內(nèi)容如下:
{ "Discord": { "token": "your-bot-token", "channel": "your-channel-id", "logChannel": "your-bot-log-channel-id (leave it empty if you dont want log. )" }, "Unity": [ { "2022.3.14f1": "E:\\Program Files\\Unity 2022.3.14f1\\Editor\\Unity.exe" } ], "Projects": [ { "name": "example", "path": "D:\\Unity_Projects\\example", "unityVersion": "2022.3.14f1", "playerBuildOutput": "D:\\Unity_Projects\\example\\Build", "addressableBuildOutput": "D:\\Unity_Projects\\example\\ServerData" } ], "Ssh": { "address": "", "user": "", "password": "", "privateKeyPath": "", "keepAliveInterval": "-1", "expectedFingerprints": [] } }
其中Unity節(jié)點(diǎn)下是一個(gè)列表,列表相當(dāng)于是一個(gè)Dictionary<string, JSONNode>,我們得稍微處理一下。
EditorInstallations = new Dictionary<string, string>(); foreach (JSONNode node in ConfigurationUtility.Configuration["Unity"].AsArray) { foreach (var kvp in node) { EditorInstallations.Add(kvp.Key, kvp.Value.Value); _logger.LogInformation($"[{GetType()}] Found a Unity Editor installation! {kvp.Key}, {kvp.Value}"); } }
對于這種列表的情況,SimpleJSON給我們預(yù)留了JSONArray,里面包含了JSONNode列表。
我們再進(jìn)到JSONNode去看,你會發(fā)現(xiàn)JSONNode其實(shí)是有KeyValuePair的。
Key是一個(gè)string,也就是字段名,Value還是一個(gè)JSONNode,至于怎么處理Value里的東西就看當(dāng)時(shí)怎么規(guī)定的類型了。如果是string,那就直接拿JSONNode的Value就可以了。
?重要提醒:有同志用ToString習(xí)慣了直接就上去用了,這是不太對的。雖說SimpleJSON的確實(shí)現(xiàn)了ToString方法,但其實(shí)干的事情和函數(shù)名不是完全一致,它實(shí)際上是返回了JSON字符串,和我們理解的string的不同點(diǎn)在于它返回的字符串的開頭和結(jié)尾會帶著雙引號!請務(wù)必注意這一點(diǎn),除非你有特殊需求,否則請直接從JSONNode.Value拿。關(guān)于這塊的更詳細(xì)解釋,請見此issue。
到此這篇關(guān)于C# SimpleJSON字典反序列化的文章就介紹到這了,更多相關(guān)C# SimpleJSON反序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#/VB.NET實(shí)現(xiàn)從PPT中提取圖片的示例代碼
PPT是用于制作幻燈片(演示文稿)的應(yīng)用軟件,每張幻燈片中都可以包含文字、圖形、圖形、表格、聲音和影像等多種信息。本文主要介紹了如何實(shí)現(xiàn)從PPT中提取圖片的功能,需要的可以參考一下2023-03-03c# 實(shí)現(xiàn)文件上傳下載功能的實(shí)例代碼
這篇文章主要介紹了如何用c# 實(shí)現(xiàn)文件上傳下載功能,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07服務(wù)器端C#實(shí)現(xiàn)的CSS解析器
服務(wù)器端C#實(shí)現(xiàn)的CSS解析器2008-09-09Unity UI實(shí)現(xiàn)循環(huán)播放序列圖
這篇文章主要為大家詳細(xì)介紹了Unity UI實(shí)現(xiàn)循環(huán)播放序列圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08