Unity自带的SimpleJSon的简单使用

来源:互联网 发布:matlab编程第刘卫国 编辑:程序博客网 时间:2024/06/05 04:57
</pre><pre code_snippet_id="1601018" snippet_file_name="blog_20160307_1_6633309" name="code" class="csharp">public class MyObject{    public string name;    public MyNewObject newOjbect;    public san si;}<pre name="code" class="csharp"><pre name="code" class="csharp">[System.Serializable]//这个加上好点
<pre name="code" class="csharp">public class MyNewObject{    public int level;     public san s;}public class san{     public int l = 333;}void Start () { MyObject myObject = new MyObject(); myObject.name = "雨松MOMO"; myObject.newOjbect = new MyNewObject() {level = 100 }; myObject.newOjbect.s = new san();myObject.si = new san();myObject.si.l = 444; string json = JsonUtility.ToJson(myObject); Debug.Log(json); json = JsonUtility.ToJson(myObject); Debug.Log(json); // myObject = JsonUtility.FromJson<MyObject>(json);//简单的反序列化。反序列化被执行一次后,json字段里的数据将被清除 JsonUtility.FromJsonOverwrite(json, myObject);//深度的反序列化。包含其他类的对象也会被赋值。 //请注意,JSON 序列化程序 API 支持 MonoBehaviour 和 ScriptableObject 的子类,// 以及普通的结构类。但是,当反 JSON 序列化到 MonoBehaviour 或 ScriptableObject 的子类// 则必须使用 FromJsonOverwrite; FromJson 不支持,并将引发异常。Debug.Log(myObject.newOjbect.s.l); Debug.Log(myObject.si.l);}

//private成员需要加上   [SerializeField]属性才能


SimpleJSon序列化List:

 /// <summary>    /// 允许序列化List。    /// </summary>    /// <typeparam name="T">T必须要加上[System.Serializable]属性。否则不会被序列化</typeparam>    [System.Serializable]    public class Serialization<T>    {        [SerializeField]//强迫unity去序列化一个私有字段        List<T> target;      /// <summary>        ///返回创建的list      /// </summary>      /// <returns></returns>        public List<T> ToList()        {            return target;        }        public Serialization(List<T> target)        {            this.target = target;        }    }//====准备测试的数据========//[System.Serializable]    class A    {        public int a = 111;        public B b = new B();    }     [System.Serializable]<span style="font-family: Arial, Helvetica, sans-serif;">//仅仅只是这个属性不会被继承,他的子类如果也想被序列化也要加上这个属性</span>    class B    {        public int b = 222;    }       [System.Serializable]<span style="font-family: Arial, Helvetica, sans-serif;">//如果子类添加了这个属性,他的父类则不用添加这个属性。</span>    class C:B    {        public int c = 333;    }//=====测试代码===========void Start () {        Serialization<C> s1 = new Serialization<C>(new List<C>());        s1.ToList().Add(new C());        string js = JsonUtility.ToJson(s1);        Debug.Log(js);       List<C> lb = JsonUtility.FromJson<Serialization<C>>(js).ToList();    //    Serialization<A> serB = new Serialization<A>(new List<A>());      //  JsonUtility.FromJsonOverwrite(js, serB);       Debug.Log(lb[0].b);//输出222        Debug.Log(lb[0].c);//输出333}

SimpleJSon序列化Dictionary:

        userReg = new UserRegister(userData);        Serialization<string, C> dy = new Serialization<string, C>(new Dictionary<string, C>());        dy.toDictionary().Add("c",new C());        string js = JsonUtility.ToJson(dy);        Serialization<string, C> dy2 = JsonUtility.FromJson<Serialization<string, C>>(js);        Debug.Log(dy2.toDictionary()["c"].c);


0 0