1: JSON (JavaScript Object Notation)
隨着JavaScript的流行與互聯網應用,JavaScript裏面最強大的數據類型Object,使用起來極其的方便,爲了能更好的做數據交換,設計了JSON協議,能夠將JavaScript裏面的Object,變成可以閱讀的文本數據及JSON數據格式。實現JavaScript裏面的Object與JSON的轉換,Object對象轉換成JSON數據以後,方便傳輸與存儲,JSON變爲Object方便對象重建;
2: python語言, Lua語言等其它的腳本語言都有類是於JavaScript的Object數據結構,所以JSON數據能在其它的語言裏面也非常方便的使用;
3: JSON採用完全獨立於語言的文本格式(string),易於閱讀與編寫以及解析與生成,在很多時候數據交換都採用JSON, 數據--->JSON-->傳輸,存儲--->解碼JSON-->數據
4: 上面的過程又叫序列化與反序列化;
那麼直接上代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
class Subsub
{
public string string_subsub;
}
[System.Serializable]
class Sub
{
public int int_a = 10;
public string string_b = "Hello word";
public Subsub subsub;
[SerializeField]
bool bool_c = true;
//public void fun()
//{
// Debug.Log("啥也不是");
//}
}
public class JSON : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Sub sub = new Sub();
string json_string = JsonUtility.ToJson(sub);
Debug.Log("封裝的字符串"+json_string);
Sub sub_rec = new Sub();
JsonUtility.FromJsonOverwrite(json_string, sub_rec);
Debug.Log(sub_rec.string_b);
}
// Update is called once per frame
void Update()
{
}
}
序列化只會序列化類裏面的public成員,所以如果你想序列化私有成員,就必須在私有成員那裏聲明爲可序列化段
Unity中有專門的接口幫你去將類序列化成string,
也有專門的接口將已經序列成string的字符串反序列化到提供的對象裏面
按照以上的類,序列化出來的string是這樣的
可以從註釋的代碼裏面看見,我還嘗試聲明瞭一個public函數,按能否序列化出來,但是失敗了,所以我推斷,Unity的JsonUtility.ToJson()接口只能序列化類的成員變量。