Unity 3 D開発小贴士(十四)JsonUtility
1985 ワード
Jsonは現在非常によく使われているデータフォーマットです。Netのバージョンの問題は、すべての便利な方法がなくて、直接Unityの中でC#公式のJsonライブラリを使用することができて、そこでUnity 3 Dは自分で自分のJsonツール--JsonUtilityを提供しました。
次の例を参照してください.using UnityEngine;
using System.Collections;
public class TestSer
{
public int i;
public string str;
}
public class TestDeser
{
public string str;
public float i;
}
public class TestDeser2
{
public string st;
public float f;
}
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
TestSer ts = new TestSer();
ts.i = 10;
ts.str = "aaaa";
string json = JsonUtility.ToJson (ts);
Debug.Log (json);
TestDeser td = JsonUtility.FromJson (json);
Debug.Log (td.str);
Debug.Log (td.i);
TestDeser2 td2 = JsonUtility.FromJson (json);
Debug.Log (td2.st);
Debug.Log (td2.f);
}
}
JsonUtilityは使いやすく、節操の制約がないことがわかります.
JsonUtilityは配列をサポートし、直列化可能なカスタムタイプ、すなわちSystemを追加する必要がある.Serializableプロパティ(プロパティについては、C#構文の小知識(七)プロパティを参照).
例:[System.Serializable]
public struct TestObj
{
public string ttt;
}
public class TestSer2
{
public int i;
public string str;
public TestObj obj;
public int[] arr;
public GameObject go;
}
シーケンス化: TestSer2 ts2 = new TestSer2();
ts2.i = 10;
ts2.str = "aaaa";
ts2.obj = new TestObj ();
ts2.obj.ttt = "tttt";
ts2.arr = new int[3];
ts2.arr [0] = 1;
ts2.arr [1] = 1;
ts2.arr [2] = 1;
ts2.go = new GameObject ("go");
string json = JsonUtility.ToJson (ts2);
印刷結果:{"i":10,"str":"aaaa","obj":{"ttt":"tttt"},"arr":[1,1,1],"go":{"instanceID":-12766}}
間違いなく、JsonUtilityはC反射(C文法の小知識(10)反射を参照)を使用しているので、効率が悪くなります.効率面では、マイクロソフトの自社のBinaryやXMLライブラリのほうが少し良いに違いありません.(詳細はC#構文小知識(十六)シーケンス化と逆シーケンス化(XML)とC#構文小知識(十七)シーケンス化と逆シーケンス化(Binary)を参照)
using UnityEngine;
using System.Collections;
public class TestSer
{
public int i;
public string str;
}
public class TestDeser
{
public string str;
public float i;
}
public class TestDeser2
{
public string st;
public float f;
}
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
TestSer ts = new TestSer();
ts.i = 10;
ts.str = "aaaa";
string json = JsonUtility.ToJson (ts);
Debug.Log (json);
TestDeser td = JsonUtility.FromJson (json);
Debug.Log (td.str);
Debug.Log (td.i);
TestDeser2 td2 = JsonUtility.FromJson (json);
Debug.Log (td2.st);
Debug.Log (td2.f);
}
}
[System.Serializable]
public struct TestObj
{
public string ttt;
}
public class TestSer2
{
public int i;
public string str;
public TestObj obj;
public int[] arr;
public GameObject go;
}
TestSer2 ts2 = new TestSer2();
ts2.i = 10;
ts2.str = "aaaa";
ts2.obj = new TestObj ();
ts2.obj.ttt = "tttt";
ts2.arr = new int[3];
ts2.arr [0] = 1;
ts2.arr [1] = 1;
ts2.arr [2] = 1;
ts2.go = new GameObject ("go");
string json = JsonUtility.ToJson (ts2);
{"i":10,"str":"aaaa","obj":{"ttt":"tttt"},"arr":[1,1,1],"go":{"instanceID":-12766}}