一.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了。恩恩