对于U3D游戏开发中,对于json数据的存储和读取通常有默认json,和litjson的解决方案(当然还有其它的),本次将对于json数据读取与存储提供思路。
using LitJson;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
/// <summary>
/// Json管理器使用的Json方案
/// </summary>
public enum JsonType
{
JsonUtlity,
LitJson,
}
/// <summary>
/// Json管理器
/// </summary>
public class JsonMgr :BaseManager<JsonMgr>
{
/// <summary>
/// 保存数据
/// </summary>
/// <param name="data"></param>
/// <param name="fileName"></param>
/// <param name="type"></param>
public void SaveData(object data,string fileName,JsonType type=JsonType.LitJson)
{
string path=Application.persistentDataPath+ "/" + fileName+".json";
string jsonStr = "";
switch(type)
{
case JsonType.JsonUtlity:
jsonStr=JsonUtility.ToJson(data);
break;
case JsonType.LitJson:
jsonStr=JsonMapper.ToJson(data);
break;
}
File.WriteAllText(path, jsonStr);
}
/// <summary>
/// 加载数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fileName"></param>
/// <param name="type"></param>
/// <returns></returns>
public T LoadData<T>(string fileName,JsonType type=JsonType.LitJson)where T:new()
{
string path = Application.streamingAssetsPath + "/" + fileName + ".json";
if(!File.Exists(path))
path = Application.persistentDataPath + "/" + fileName + ".json";
if (!File.Exists(path))
return new T();
string jsonStr=File.ReadAllText(path);
T data = default(T);
switch(type)
{
case JsonType.JsonUtlity:
data=JsonUtility.FromJson<T>(jsonStr);
break;
case JsonType.LitJson:
data=JsonMapper.ToObject<T>(jsonStr);
break;
}
return data;
}
}
用于存储游戏相关数据,用于配置游戏数据。对于网络游戏,可以存储一些客户端的简单不重要数据,可以用于传输信息。
缺点:数据容易被修改,只要找到文件位置,就可以轻易进行数据修改。