關于和伺服器資料之間的轉換在此就不再贅述,官網以及一些部落格裡已有涉及,而且也比較詳細了。
這裡,主要談一下LitJson的其他用途。
想象一個場景,你需要顯示一個家庭資訊的表格,這個表格的每一行代表了你的一個家人的名字、年齡、手機号碼和住址等資訊。因為這個資訊不大,用資料庫實在是大材小用,而且也很麻煩。
我們可以用一個資料結構來在代碼裡表示每個家人的資訊:
public class FamilyInfo {
public string name;
public int age;
public string tellphone;
public string address;
}
然後用一個List來表示家庭資訊表:
public class FamilyList {
public List<FamilyInfo> family_list;
最後,列印資訊:
private void DisplayFamilyList(FamilyList familyList) {
if (familyList == null) return;
foreach (FamilyInfo info in familyList.family_list) {
Debug.Log("Name:" + info.name + " Age:" + info.age + " Tel:" + info.tellphone + " Addr:" + info.address);
}
準備工作都已經做好,那麼資料到底在什麼時候初始化呢?
一種方法是我們可以在編輯面闆裡直接初始化。為了達到目的,我們還需要告訴Unity編輯器在面闆裡顯示我們的FamilyInfo,以便我們可以随機編輯,這是通過在類名前聲明
[System.Serializable]來實作的。
具體代碼如下:
sing System.Collections;
using System.Collections.Generic;
using LitJson;
[System.Serializable]
public class LitJsonSample : MonoBehaviour {
public FamilyList m_FamilyList = null;
// Use this for initialization
void Start () {
DisplayFamilyList(m_FamilyList);
private void DisplayFamilyList(FamilyList familyList) {
if (familyList == null) return;
foreach (FamilyInfo info in familyList.family_list) {
Debug.Log("Name:" + info.name + " Age:" + info.age + " Tel:" + info.tellphone + " Addr:" + info.address);
}
// Update is called once per frame
void Update () {
運作結果如下:

但是這種方法靈活性太差,而且很容易發生錯誤。例如當我們不小心改變了變量名稱,那麼我們在面闆裡編輯好的資料就都會不見了!下面介紹另一種比較好的方法——把資料儲存為本地的一個文本檔案。
正如前面所說,我們把資訊存成一個表格,并儲存為txt格式。注意,為了能使用LitJson解析,txt中必須使用Json格式。
family.txt如下:
{
"family_list": [
{
"name" : "candycat",
"age" : 21,
"tellphone" : "xxx",
"address" : "xxx"
},
"name" : "candycat#",
"age" : 22,
"name" : "candycat##",
"age" : 23,
]
代碼如下:
using UnityEngine;
using UnityEditor;
using System.Collections;
ReloadFamilyData();
private void ReloadFamilyData()
{
UnityEngine.TextAsset s = Resources.Load("Localize/family") as TextAsset;
string tmp = s.text;
m_FamilyList = JsonMapper.ToObject<FamilyList>( tmp );
if ( JsonMapper.HasInterpretError() )
Debug.LogWarning( JsonMapper.GetInterpretError() );
有幾點注意的地方:
Resources.Load("Localize/family")表示加載family檔案,但一定要注意要把family.txt檔案放在Resources檔案夾下,隻有這樣Resources.Load才能夠通路到,在這個例子裡family的絕對路徑為“Resources/Localize/family”。這是因為Resources檔案夾是Unity預設的資源檔案夾,有着特殊的用途,這裡我還不是很了解,以後要深入學習一下;
Resources.Load參數中的路徑名一定不可以包含字尾,這裡也就是.txt字尾;
輸出結果和第一種方法完全一樣。
使用LitJson解析時,解析類(如上面的FamilyInfo)若包含Dictionary結構,則key的類型必須是string,而不能是int類型(如需表示id等),否則無法正确解析!
插件下載下傳位址:http://download.csdn.net/detail/candycat1992/6624695
本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366365,如需轉載請自行聯系原作者