Unity序列化之Json
講道理Unity自帶的JsonUtility庫在Unity5之后就已經實裝,而且性能也強,但是無奈網上的博客大多都是各種復讀機,以致于國內我看好多帖子用的都是第三方的Json庫。

要使用 JsonUtility 不用額外導入名字空間,這個類下面,我們能使用的一共就三個接口

其中 FromJson 是反序列化,用于將Json文件讀取到我們所指定的變量中,如果是帶引用的類,官方推薦使用 FromJsonOverwrite?
函數(shù)原型:



使用示例:



ToJson 則是將變量序列化為 Json 字符串,便于我們保存至本地或者進行網絡傳輸。其重載的第二個參數(shù)為設定導出后的 Json 字符串格式,默認是 false,如果設置為 true,那么最終的內容包含換行符(也就是更好看的意思)
雖然 JsonUtility 可以序列化多種類型的變量,包括各類數(shù)字,集合,不過要說明的是,只有公開 public 的字段會被序列化,字典暫時是無法進行序列化的,屬性也是無法序列化的,[System.NonSerialized] 標簽修飾的字段以及私有字段也會不序列化

不知道是我記錯了還是啥原因,我記得以前List可以直接序列化,但是前兩天在寫到相關功能的時候發(fā)現(xiàn)序列化的結果是空值,到處翻資料,發(fā)現(xiàn)了一個新的標簽??[SerializeReference] 在加上這個標簽之后,可以正確序列化。

對于我們自定義的類,只需要添加?[System.Serializable] 標簽就可以正常序列化,但是如果將其放置在 列表中,那么必須再使用一個類進行包裹,才可以正常序列化。

2020年11月30日更新:
和小伙伴討論了一下,因為List類型并不是object的子類,所以直接將List類型傳入ToJson會導致空值,所以就不能直接傳入List類型的值,最好的辦法就是像上圖一樣把列表放在一個類中,讓Unity把這個類序列化成Json字符串.
對于[SerializeReference]?這個標簽,只對引用類型有效,其實加不加,問題應該不大,如果有問題就加上吧...