提供方法
// 读取对象
Fan.JsonUtilities.JsonHelper.ReadFromJson<RoleData>(存储文件名称);
// 读取对象数组
Fan.JsonUtilities.JsonHelper.ReadListFromJson<RoleData>(存储文件名称);
// 存储对象
Fan.JsonUtilities.JsonHelper.SaveAsJson(对象,存储文件名称);
// 存储对象数组
Fan.JsonUtilities.JsonHelper.SaveAsJson(对象数组,存储文件名称);
// 删除存储对象
Fan.JsonUtilities.JsonHelper.Delete(存储文件名称);
注意
要保存的字段的访问修饰符必须是public。
如果要存储对象数组,则该对象对应的类必须用[System.Serializable]标记。
代码
JsonHelper.cs
using System.ComponentModel;
using System.Linq;
using System.IO;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Fan.JsonUtilities
{
public static class JsonHelper
{
#region 读取、保存、删除
public static List<T> ReadListFromJson<T>(string fileName)
{
string content = FileNameToContent(fileName);
var result = new List<T>();
if (IsValidContent(content))
{
result = ArrayJsonExtension.FromJson<T>(content).ToList();
}
return result;
}
public static T ReadFromJson<T>(string fileName)
{
string content = FileNameToContent(fileName);
T result = default;
if (IsValidContent(content))
{
result = JsonExtension.FromJson<T>(content);
}
return result;
}
public static bool SaveAsJson<T>(List<T> objs, string fileName)
{
return SaveAsJson(ArrayJsonExtension.ToJson<T>(objs.ToArray()), fileName);
}
public static bool SaveAsJson<T>(T obj, string fileName)
{
return SaveAsJson(JsonExtension.ToJson<T>(obj), fileName);
}
public static bool Delete(string fileName)
{
WriteFile(GetPath(fileName), string.Empty);
return true;
}
#endregion
private static string GetPath(string fileName)
{
return Application.persistentDataPath + "/" + fileName + ".json";
}
private static void WriteFile(string path, string content)
{
FileStream fileStream = new FileStream(path, FileMode.Create);
using (StreamWriter writer = new StreamWriter(fileStream))
{
writer.Write(content);
}
}
private static string ReadFile(string path)
{
if (File.Exists(path))
{
using (StreamReader reader = new StreamReader(path))
{
string content = reader.ReadToEnd();
return content;
}
}
return string.Empty;
}
private static string FileNameToContent(string fileName)
{
return ReadFile(GetPath(fileName));
}
private static bool IsValidContent(string content)
{
return !string.IsNullOrEmpty(content) && content != "{}";
}
private static bool SaveAsJson(string content, string fileName)
{
WriteFile(GetPath(fileName), content);
return true;
}
private static class ArrayJsonExtension
{
public static T[] FromJson<T>(string json)
{
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
return wrapper.objs;
}
public static string ToJson<T>(T[] array, bool prettyPrint = true)
{
Wrapper<T> wrapper = new Wrapper<T>();
wrapper.objs = array;
return JsonUtility.ToJson(wrapper, prettyPrint);
}
[Serializable]
private class Wrapper<T>
{
public T[] objs;
}
}
private static class JsonExtension
{
public static T FromJson<T>(string json)
{
T obj = JsonUtility.FromJson<T>(json);
return obj;
}
public static string ToJson<T>(T obj, bool prettyPrint = true)
{
return JsonUtility.ToJson(obj, prettyPrint);
}
}
}
}
网友评论