Unity中使用Newtonsoft反序列化Json的一些基本操作
宣告:
本帖僅為個人學習筆記,且本人表達可能不準確,如有幫助最好不過,寫得不好請見諒,另歡迎各位大佬補充和糾錯,多謝支援
關於Newtonsoft:
json轉物件基礎用法:
比如我想轉換下面這一個Json檔案:
物件程式碼如下:其中JsonProperty是用來對映屬性到json裡面去的,PropertyName就是你要解析的json物件的名字(PS:要轉換成DIctionary,json裡面格式必須是上圖裡面的格式,否則會報錯)
解析程式碼如下:
首先要讀取到Json文字,方法就是File.ReadAllText(string path);我的json檔案都是放在Resources裡的configs下面的;
然後就是通過JsonConvert.DeserializeObject<>(string json);方法來直接解析成物件,<>裡面填的是你要解析的物件型別,比如我這裡就像解析上圖物件的一個列表出來,m_forgeGraohLIst是一個列表,到這裡json解析就已經完成了, 你已經獲得了相關物件,後面的幾句程式碼是測試的,我們取出列表裡面第一個元素的_ForgeItemsId字典裡面的1對應的值,其結果應該為2(參照上邊的json檔案)
測試結果:
解析部分Json屬性值的方法:
還是直接給例子,比如要轉換下面這個 json檔案:
我現在有一個父類Item,一些子類 繼承自它,比如 Consumable,Equipment等,我直接解析出這個json的話它必須是一個列表,而且必須是Item的一個列表,那麼我想通過裡面每一個物件的 type來生成相應子類就不可能實現,所以這個時候就要先轉成JObject 獲取到JToken列表來判斷,具體本人也不是很清楚,所以直接上程式碼:
第一步還是一樣獲取json字串,然後我們要先將其反序列化為JObject(PS:這裡需要using Newtonsoft.Json.Linq,否則沒有),然後得到一個JToken的列表,這個列表我個人理解的是裡面相當於一個物件,只是說你可以通過 json裡面的名字去取到 對應的值,比如上面googleSearch["Items"]它就取到這個名字後面的值,.Children().ToList()則是將其值裡面的子物件轉換為列表(PS:這裡需要using System.Linq,否則沒有ToList()方法);
然後就是去遍歷這個列表了,可以看到我先是取了JToken物件的"type"的值並轉換為ItemType列舉, 然後再switch去對不同type進行處理(PS:Unity裡面輸入switch後按兩下tab,再在()裡面填入要判斷的變數後再tab,Unity會自動列舉出所有情況), 然後我再把這個item轉換為對應的子類物件即可。
測試結果:
綜合得出來的結果,應為僅按照兩者中的任何一個都有許多坑,這裡不再贅述,大家可以去官方文件裡面看看有沒有更簡單的方法實現這個效果