Unity5.3Json測試學習

一.unity5.3新增了生成json、解析json和重寫json的api,這裏簡單下。

namespace UnityEngine
{
   //解析json用的工具類
    public static class JsonUtility
    {
        //
        // 摘要:
        //     ///
        //     通過一個json和一個指定的父節點類型,返回這個父節點類的實例
        //     ///
        //
        // 參數:
        //   json:
        //     json格式的string字符串
        //
        //   type:
        //     根結點類型
        //
        // 返回結果:
        //     ///
        //     <pre name="code" class="csharp"><span style="white-space:pre">		</span>根節點類的實例
// /// [WrapperlessIcall] public static object FromJson(string json, Type type);


<span style="white-space:pre">	</span>//上面的一個泛型方法
        public static T FromJson<T>(string json);
        //
        // 摘要:
        //     ///
        //     制定一個根結點類,重寫以這個根結點爲基礎的json
        //     ///
        //
        // 參數:
        //   json:
        //     重寫的json,即新的json字符串
        //
        //   objectToOverwrite:
        //     需要重寫的根結點類實例
        [WrapperlessIcall]
        public static void FromJsonOverwrite(string json, object objectToOverwrite);
        //
        // 摘要:
        //     ///
        //     將一個根結點爲obj的“類樹”解析爲json字符串
        //     ///
        //
        // 參數:
        //   obj:
        //     根類
        //
        //   prettyPrint:
        //     If true, format the output for readability. If false, format the output for minimum
        //     size. Default is false.
        //
        // 返回結果:
        //     ///
        //     json字符串
        //     ///
        public static string ToJson(object obj);
        //
        // 摘要:
        //     ///
        //     和上面一樣,格式化是否格式化輸出
        //     ///
        //
        // 參數:
        //   obj:
        //     The object to convert to JSON form.
        //
        //   prettyPrint:
        //     如果是true,格式化輸出,如果不是,以最省略形式輸出,就是json文件就是一行,沒有換行        //
        // 返回結果:
        //     ///
        //     The object's data in JSON format.
        //     ///
        [WrapperlessIcall]
        public static string ToJson(object obj, bool prettyPrint);
    }
}

二.示例程序

JsonClass.cs 用於構建類結構

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

[Serializable]
public class University
{
    public string UniversityName;
    //專業
    public Specialty specialty;
    //專業代號
}

[Serializable]
public class Specialty
{
    public string SpecialtyName;
    //人數
    public int StudentCount;
    //學生

    public Student student1;
    public Student student2;
    public Student student3;
}

[Serializable]
public class Student
{
    //學生姓名
    public string StudentName;
    //成績
    public int StudengScore;
}

MyTestJson.cs 用於掛在GameObject中測試:

using UnityEngine;
using System.Collections;

public class MyTestJson : MonoBehaviour {

	// Use this for initialization
	void Start () {
        string json = writeJson();
        Debug.Log(json);
        int firstStuNum = getFirstSpecialtyStuNums();
        Debug.Log("第一個班級軟加班有學生人數: " + firstStuNum + "個");
        
        
    }
	
	// Update is called once per frame
	void Update () {
	
	}

    //編寫一個大學信息的json格式
    public string writeJson()
    {
        University uni = new University();
        uni.UniversityName = "qiongzhou";
        uni.specialty = new Specialty()
        {
            SpecialtyName = "SoftWare",
            StudentCount = 2,
            
            
             
            
        };
        uni.specialty.student1 = new Student()
        {
            StudentName = "蛋蛋君",
            StudengScore = 0
        };
        uni.specialty.student2 = new Student()
        {
            StudentName = "死羊君",
            StudengScore = 59
        };
        string json =  JsonUtility.ToJson(uni);
        return json;

    }

    public int getFirstSpecialtyStuNums()
    {
        University uni = new University();
        uni = JsonUtility.FromJson<University>(writeJson());

        int num = uni.specialty.StudentCount;
        return num;
    }

測試結果:


--------------------------------------------------------------------------------------------------------------------------------------------------------------

再測試下重寫json的

public static void FromJsonOverwrite(string json, object objectToOverwrite);方法
源代碼:
<pre name="code" class="csharp">using UnityEngine;
using System.Collections;

public class MyTestJson : MonoBehaviour {

	// Use this for initialization
	void Start () {
        string json = writeJson();
        
        
    }
	
	// Update is called once per frame
	void Update () {
	
	}

    //編寫一個大學信息的json格式
    public string writeJson()
    {
        University uni = new University();
        uni.UniversityName = "qiongzhou";
        uni.specialty = new Specialty()
        {
            SpecialtyName = "SoftWare",
            StudentCount = 2,
            
            
             
            
        };
        uni.specialty.student1 = new Student()
        {
            StudentName = "蛋蛋君",
            StudengScore = 0
        };
        uni.specialty.student2 = new Student()
        {
            StudentName = "死羊君",
            StudengScore = 59
        };
        string json =  JsonUtility.ToJson(uni);
        Debug.Log(json);
        string newjson = writeJson2();
        JsonUtility.FromJsonOverwrite(newjson, uni);
        Debug.Log("修改後的json :" + JsonUtility.ToJson(uni));
        return json;

    }

   

    public string writeJson2()
    {
        University newuni = new University();
        newuni.UniversityName = "HaiDa";
        newuni.specialty = new Specialty()
        {
            SpecialtyName = "SoftWare",
            StudentCount = 3,




        };
        newuni.specialty.student1 = new Student()
        {
            StudentName = "小鳥遊",
            StudengScore = 10
        };
        newuni.specialty.student2 = new Student()
        {
            StudentName = "亂入君",
            StudengScore = 20
        };
        newuni.specialty.student3 = new Student()
        {
            StudentName = "湊數君",
            StudengScore = 30
        };
        return JsonUtility.ToJson(newuni);
    }
}

測試結果:


<img src="https://img-blog.csdn.net/20151219021843376?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
從表面上看就是這樣的,挺好用的,不用自己寫格式化json了。恩恩

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章