本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。
http://blog.csdn.net/lzhq1982/article/details/19237031
前面转载的文章介绍过如何利用c#解析json,但实用性有些差,对于游戏大量数据的保存和读取很不方便。这里着重介绍下JsonMapper的使用,可以很简单就实现json格式的数据保存与读取。
以游戏中的建筑举例,假如我的游戏可以建造很多建筑,建筑公有的数据结构如下:
public class BuildingSaveData {
public string strID;
public int nBuildingId;
public int nBuildingLevel;
...
}
那如何保存这个建筑列表里的建筑信息呢,如果用JsonWriter一个数据一个数据的保存,那数据量小还好,数据多就太复杂了,程序员不是干体力劳动的工种。这时候就让JsonMapper来解决吧。
1、这里我们用LitJson库里的Json,所以首先需要加载LitJson库,没有的百度上下载一个,然后放到你的工程下,我放在了Assets/Plugins下,然后别忘了在文件头引用LitJson:
using LitJson;
2、写一个建筑列表的类。
public class BuildingList {
public List _buildingList = new List();
}
先创建BuildingList的对象:BuildingList _ownBuildingList = null; 然后就可以保存数据了,代码如下:
public void SaveBuildingData(BuildingSaveData data) {
string filePath = Application.dataPath + @"/Resources/Settings/JsonBuilding.txt";
if (!File.Exists(filePath)) {
_ownBuildingList = new BuildingList();
_ownBuildingList._buildingList.Add(data);
} else {
bool bFind = false;
for (int i = 0; i < _ownBuildingList._buildingList.Count; ++i) {
BuildingSaveData saveData = _ownBuildingList._buildingList[i];
if (data.strID == saveData.strID) {
saveData.nBuildingLevel = data.nBuildingLevel;
...
bFind = true;
break;
}
}
if (!bFind)
_ownBuildingList._buildingList.Add(data);
}
FileInfo file = new FileInfo(filePath);
StreamWriter sw = file.CreateText();
string json = JsonMapper.ToJson(_ownBuildingList);
sw.WriteLine(json);
sw.Close();
sw.Dispose();
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
using System.IO;
using System.Text;
#if UNITY_EDITOR
using UnityEditor;
#endif
4、读取建筑信息
一般在游戏刚加载的就需要将文件里存储的数据读取出来,利用JsonMapper读取数据相当简单。
public void LoadBuildingData() {
TextAsset s = Resources.Load("Settings/JsonBuilding") as TextAsset;
if (!s)
return;
string strData = s.text;
_ownBuildingList = JsonMapper.ToObject(strData);
}
最后你只要在适合的地方保存你的数据,适合的时候读取数据就可以了,相似的数据保存读取方式可以照上面套用。最后看一下我这里的JsonBuilding.txt文件保存的数据:
{"_buildingList":[{"strID":"01/23/2014 17:31:22","nBuildingId":1,"nBuildingLevel":2},{"strID":"01/23/2014 17:48:10","nBuildingId":2,"nBuildingLevel":1},{"strID":"01/23/2014 17:53:09","nBuildingId":3,"nBuildingLevel":1}]}