Json學習筆記之在Unity中如何解析Json文件


一、官方API:https://docs.unity3d.com/ScriptReference/JsonUtility.html

  在Unity中使用JsonUtility類對Json進行解析,此類包含三個重要方法,下面進行詳解。

 

 

二、FromJson方法(反序列化)

   將Json轉換為object

  返回值是一個Object,需要在對應的類或結構體前標記Serializable屬性(沒標記好像也行 序列化不成功可能就是因為沒有標記)。object類型必須支持序列化,其中的字段也必須支持序列化(比如私有類型、標記了NonSerialized屬性的類型等不可序列化字段會被忽視)。

  只有普通的類/結構體才行, 繼承自UnityEngine.Object (比如 MonoBehaviour 或 ScriptableObject)的類則不行。

  使用string的此函數可以在后台線程調用,但使用TextAsset的此函數只可以在主線程調用。 

using UnityEngine;

[System.Serializable]
public class PlayerInfo
{
    public string name;
    public int lives;
    public float health;

    public static PlayerInfo CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<PlayerInfo>(jsonString);
    }

    // Given JSON input:
    // {"name":"Dr Charles","lives":3,"health":0.8}
    // this example will return a PlayerInfo object with
    // name == "Dr Charles", lives == 3, and health == 0.8f.
}

 

 

三、ToJson(序列化)

  將object轉換為Json

  參數

obj 要轉換為Json的object
prettyPrint 如果為true,則格式化輸出以確保可讀性。如果為false,則將輸出格式化為最小大小。默認值為false。

  

  返回值是json格式的string。

  傳入的object必須是支持序列化的:這個object必須繼承自MonoBehaviour、ScriptableObject(其他引擎類型使用EditorJsonUtility.Tojson),或者是標記Serializable屬性的普通類/結構體。想要包含的字段也必須是支持序列化的,不支持序列化的字段如private、static以及標記了NonSerialized屬性的字段等會被忽略。

  傳入的object不能是基本數據類型如int,float,也不能為數組。想要序列化基本數據類型或者數組,就需要將它們寫入一個類或結構體中,再將類/結構體實例化的對象傳入即可。

直接傳入一個數組,序列化失敗
將數組寫進類中,將類實例化對象傳入,序列化成功

 

 

  此函數可以在后台線程中執行,但此函數執行過程中不要去修改傳入的object的值。

 

四、FromJsonOverwrite

  此函數和FromJson非常類似,只有一點不同:此函數要把Json中的數據讀入一個已經存在的對象中,覆蓋該對象原來的數據。(FromJson是返回一個新創建的對象)

 

五、遇到不支持序列化的類型怎么辦?

  JsonUtilty類能力有限,並不能序列化/反序列化所有類型的數據,比如字典類型。這個時候就要實現Unity提供給我們的一個接口:ISerializationCallbackReceiver

  具體說明見官方文檔:https://docs.unity3d.com/cn/current/ScriptReference/ISerializationCallbackReceiver.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM