using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System.IO; /// <summary> /// 使用类型 /// </summary> public enum JsonType { /// <summary> /// 第三方 /// </summary> LitJson, /// <summary> /// 系统自带 /// </summary> JsonUtility, } /// <summary> /// Json数据处理 类 用于处理Json数据 /// Unity有自带的json处理类JsonUtility /// 不支持字典 /// 自定义类需要加特性[System.Serializable] /// private protected 类需要序列化 需要加特性[SerializeField] /// 不能直接读取数组数据 /// 我们常用LitJson /// 不支持私有变量 /// JsonData可以用来获取 字段内容 /// 字典需要使用 键string类型 /// 自定义类需要使用 无参构造函数 /// 文本编码格式UTF-8 /// </summary> public class JsonManager : BaseManager<JsonManager> { private JsonManager() { } /// <summary> /// 保存数据 PC端 /// </summary> /// <param name="data">需要存储的数据对象</param> /// <param name="fileName">存储为的文件名</param> /// <param name="type">存储方式,默认LitJson</param> public void SaveData(object data ,string fileName,JsonType type = JsonType.LitJson) { //存储路径 string path = Application.persistentDataPath + "/" + fileName + ".json"; //序列化 得到json字符串 string json = ""; switch (type) { case JsonType.LitJson: json = JsonMapper.ToJson(data); break; case JsonType.JsonUtility: json = JsonUtility.ToJson(data); break; } //把json字符串保存成文件 File.WriteAllText(path, json); } /// <summary> /// 读取数据 PC端 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="path"></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(); } //获取json字符串 string jsonStr = File.ReadAllText(path); // T data = new T(); //反序列 switch (type) { case JsonType.LitJson: data = JsonMapper.ToObject<T>(jsonStr); break; case JsonType.JsonUtility: data = JsonUtility.FromJson<T>(jsonStr); break; } return data; } }