115 lines
3.6 KiB
C#
115 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace Aibis.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);
|
|
}
|
|
|
|
/// <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中的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();
|
|
}
|
|
|
|
/// <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);
|
|
}
|
|
|
|
/// <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);
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum SaveMode
|
|
{
|
|
Replace,
|
|
Add
|
|
}
|
|
} |