Files
aibis-dream/Assets/Scripts/Utility/JsonUtil.cs
T
2025-05-16 21:47:35 +08:00

163 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace AibisDream.Utility
{
public static class JsonUtil
{
public const string JsonSuffix = ".json";
/// <summary>
/// 按路径和Key加载
/// </summary>
/// <param name="path">路径</param>
/// <param name="key">key</param>
/// <typeparam name="T">类型</typeparam>
/// <returns>Bean</returns>
/// <exception cref="Exception">错误</exception>
public static T ReadBean<T>(string path, string key)
{
string json = File.ReadAllText(path);
JObject jObject = JObject.Parse(json);
if (jObject.ContainsKey(key))
{
return jObject.ToObject<T>();
}
throw new Exception("没有找到对应的Key");
}
/// <summary>
/// 按路径加载Json
/// </summary>
/// <param name="path"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T ReadBean<T>(string path)
{
string json = File.ReadAllText(path);
return JsonConvert.DeserializeObject<T>(json);
}
public static T ReadBeanByText<T>(string text)
{
if (!text.StartsWith("{"))
{
text = "{" + text + "}";
}
return JsonConvert.DeserializeObject<T>(text);
}
/// <summary>
/// 按路径加载Json
/// </summary>
/// <param name="path">路径</param>
/// <typeparam name="T">Bean</typeparam>
/// <returns>目标Bean</returns>
public static T[] ReadBeanArray<T>(string path)
{
string json = File.ReadAllText(path);
return JsonConvert.DeserializeObject<T[]>(json);
}
/// <summary>
/// 按路径加载Json
/// </summary>
/// <param name="path">路径</param>
/// <typeparam name="T">Bean</typeparam>
/// <returns>目标Bean</returns>
public static Dictionary<string, T> ReadBeanDict<T>(string path)
{
string json = File.ReadAllText(path);
return JsonConvert.DeserializeObject<Dictionary<string, T>>(json);
}
/// <summary>
/// 获取Json中的Key列表
/// </summary>
/// <param name="path">路径</param>
/// <returns>key列表</returns>
public static string[] ReadKeys(string path)
{
string json = File.ReadAllText(path);
JObject jObject = JObject.Parse(json);
return jObject.Properties().Select(jProp => jProp.Name).ToArray();
}
public static JObject ReadJObject(string path)
{
string json = File.ReadAllText(FormatAsJsonPath(path));
return JObject.Parse(json);
}
/// <summary>
/// 保存Bean
/// </summary>
/// <param name="bean">bean</param>
/// <param name="path">路径</param>
/// <typeparam name="T">类型</typeparam>
public static void SaveBean<T>(T bean, string path)
{
string json = JsonConvert.SerializeObject(bean);
File.WriteAllText(path, json);
}
public static void SaveJObject(JObject jObject, string path)
{
string json = jObject.ToString();
File.WriteAllText(FormatAsJsonPath(path), json);
}
/// <summary>
/// 保存类
/// </summary>
/// <param name="bean">对象</param>
/// <param name="key">key</param>
/// <param name="path">保存配置</param>
/// <param name="saveMode">添加还是覆盖</param>
/// <typeparam name="T">类型</typeparam>
public static void SaveBean<T>(T bean, string key, string path, SaveMode saveMode = SaveMode.Add)
{
if (saveMode == SaveMode.Add && File.Exists(path))
{
Dictionary<string, T> originDic = JsonConvert.DeserializeObject<Dictionary<string, T>>(path);
originDic.Add(key, bean);
string tempJson = JsonConvert.SerializeObject(originDic);
File.WriteAllText(path, tempJson);
}
else
{
Dictionary<string, T> tempDic = new Dictionary<string, T> { { key, bean } };
string tempJson = JsonConvert.SerializeObject(tempDic);
File.WriteAllText(path, tempJson);
}
}
/// <summary>
/// 自动把文件名转为Json
/// </summary>
/// <param name="fileName">文件名</param>
/// <returns>已改为json的文件名</returns>
public static string FormatAsJsonPath(string fileName)
{
if (!fileName.EndsWith(JsonSuffix))
{
return fileName + JsonSuffix;
}
return fileName;
}
}
public enum SaveMode
{
Replace,
Add
}
}