102 lines
2.8 KiB
C#
102 lines
2.8 KiB
C#
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 : SingletonMono<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.streamingAssetsPath + "/" + 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;
|
||
}
|
||
}
|