最近因項目需求,必須得擼擼unity了, 寫點筆記,記錄記錄下, 在Android用Gson解析Json數據,用起來還是滿愉快的, 轉到Unity后,用了下SampleJson感覺太麻煩了,好的框架用爽了后,人就會變得也越懶,于是就想用其它更好用的框架,最終找到了unity5.3 以后 unity自己提供了一個JSON data的序列化與反序列化的類JsonUtility。</br>目前提供3個接口:
學Android 開發的朋友們肯定對Google的Gson不會陌生, 用起來是何等的爽, 這個Unity版的JsonUitlity應該就仿照Gson寫的吧...
少bb了,it‘s time to show me the code,現在我要解析的這個json 數據如下:一個head, 一個 body且包含一個數組bookList, 還有一個page
{
"head": {
"status": 200,
"message": "ok"
},
"body": {
"bookList": [
{
"id": 1000,
"title": "吶喊",
"author": "魯迅"
},
{
"id": 1001,
"title": "彷徨",
"author": "魯迅"
}
]
},
"page": {
"index": 1,
"size": 500
}
}
注意 解析的對象必須要支持序列化即用[Serializable]
標記的類, 每個類的field 必須要與json的objecty一一相匹配,如: ResponseInfo的field body
對應Json對象的body
public class ResponseInfo<T>
{
public T body;
public Head head;
public Page page;
}
[Serializable]
public class Head
{
public string message;
public int status;
}
[Serializable]
public class Page
{
public int index;
public int size;
}
[Serializable]
public class BookEntity {
public int id;
public string title;
public string author;
}
[Serializable]
public class BookInfo
{
public List<BookEntity> bookList;
}
public class Test : MonoBehaviour {
string json;
void Start ()
{
//=== 構造一個將對象序列化JsonUtility.ToJson的過程 ===//
/// 初始化Head
Head head = new Head();
head.status = 200;
head.message = "ok";
/// 初始化Body
BookInfo body = new BookInfo();
List<BookEntity> bookList = new List<BookEntity>();
BookEntity entity1 = new BookEntity();
entity1.id = 1000;
entity1.title = "吶喊";
entity1.author = "魯迅";
BookEntity entity2 = new BookEntity();
entity2.id = 1001;
entity2.title = "彷徨";
entity2.author = "魯迅";
bookList.Add(entity1);
bookList.Add(entity2);
body.bookList = bookList;
/// 初始化 Page
Page page = new Page();
page.index = 2;
page.size = 500;
/// 構造 ReponseInfo
ResponseInfo<BookInfo> info = new ResponseInfo<BookInfo>();
info.head = head;
info.page = page;
info.body = body;
////得到序列化的json
json = JsonUtility.ToJson(responseInfo);
//=== 將json通過JsonUtility.FromJson 反序列化 ===//
ResponseInfo<BookInfo> responseInfo =JsonUtility.FromJson<ResponseInfo<BookInfo>>(json);
/// ok, that's all
}
}
怎么樣,是不是比 MiniJson, SampleJson用起來方便^^
還有個接口JsonUtility.FromJsonOverwrite(json, myObject)
,暫時沒用過,以后再研究....