【Unity】JsonUtility 注意事項

22 7月, 2018

【Unity】JsonUtility 注意事項




在Unity開發多少會碰到需要解析JSON文檔的方式
Unity本身也有自帶一個輕量級
效能也高的JSON解析類庫 - 「JsonUtility




以下是官方的文檔說明
https://docs.unity3d.com/ScriptReference/JsonUtility.html

使用上相對也簡單。

不過由於這個類庫是屬於輕量級的類庫。
很多較複雜的功能都不支援。

以下是使用的注意事項:

(1)不支援自定義屬性
像是JAVA的Gson等等之類的類庫
都可以自定義反序列跟序列化的屬性


但是JsonUtility沒有SerializedName這種類似的功能

屬性名稱需要與來源資料一致
也就是key需要一致
假設來源資料如下
則結構也需要如此定義


(2) 需要"序列化/反序列化"的屬性須為public
JsonUtility是使用屬性公開與否
來判斷是否要該屬性序列化或反序列化
另外被序列化的資料,內容屬性排序是跟你物件定義的排序是一致的。


(3)解析泛型結構有瑕疵
JsonUtility 是支持泛型結構的
但是當泛型結構到第二層的時候,
解析上是會有問題的。

假設定義一個泛型資料物件

當只包裝一層的時候,UNITY解析是可以正常的。

但假設今天如果有另一個資料也是泛型物件呢?
也就是解析資料的時候,變成二層以上的泛型物件解析
如下:



會發現,解析上後面的泛型物件會直接無法被解析出來
到第二層以後的泛型物件,會導致解析有問題

附上DEMO的檔案
https://drive.google.com/open?id=1ppzAJOIXZK-rMTL4CkyaUEju82SN_Off




張貼留言