您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

243 行
8.0 KiB

using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
namespace MetaCity.BundleKit.Editor.Utils
{
/// <summary>
/// JSON对象工具类
/// <para>用于序列化和反序列化JSON字符串</para>
/// </summary>
public static class JsonTools
{
/// <summary>
/// 加载JSON文件
/// </summary>
/// <param name="path">文件路径(绝对路径)</param>
/// <returns>文件中的JSON字符串</returns>
public static string LoadJson(string path)
{
if (System.IO.File.Exists(path))
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(path))
{
string json = sr.ReadToEnd();
sr.Close();
return json;
}
}
else
{
Debug.LogError("加载本地JSON文件:" + path + "——失败,未找到该文件");
return null;
}
}
/// <summary>
/// 清除JSON字符串中的转义字符
/// </summary>
/// <param name="json">JSON字符串</param>
/// <returns></returns>
public static string Clean(string json)
{
return JsonConvert.DeserializeObject(json).ToString();
}
/// <summary>
/// 反序列化一段JSON字符串
/// </summary>
/// <typeparam name="T">可以被反序列化的类型</typeparam>
/// <param name="json">JSON字符串</param>
/// <returns>反序列化后的对象</returns>
public static T FromJson<T>(string json)
{
return JsonConvert.DeserializeObject<T>(json);
}
/// <summary>
/// 序列化JSON对象
/// </summary>
/// <param name="obj">JSON对象</param>
/// <returns>序列化字符串</returns>
public static string ToJson(object obj)
{
return JsonConvert.SerializeObject(obj);
}
/// <summary>
/// 序列化JSON对象
/// </summary>
/// <param name="obj">JSON对象</param>
/// <param name="formatting">序列化格式</param>
/// <returns>序列化后的JSON字符串</returns>
public static string ToJson(object obj, Formatting formatting)
{
return JsonConvert.SerializeObject(obj, formatting);
}
/// <summary>
/// 反序列化本地JSON文件到相应的类
/// </summary>
/// <typeparam name="T">可以被反序列化的类型</typeparam>
/// <param name="path">JSON文件的路径</param>
/// <returns>反序列化后的对象</returns>
public static T FromFile<T>(string path)
{
string json = LoadJson(path);
if (string.IsNullOrEmpty(json))
{
return default(T);
}
var t = new JsonSerializerSettings();
t.NullValueHandling = NullValueHandling.Include;
return JsonConvert.DeserializeObject<T>(json, t);
}
/// <summary>
/// 将JSON对象保存到JSON文件
/// </summary>
/// <param name="obj">JSON对象</param>
/// <param name="path">文件路径(绝对路径)</param>
/// <returns>true 保存成功 false 保存失败</returns>
public static bool ToFile(object obj, string path)
{
if (string.IsNullOrEmpty(path)) return false;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(path))
{
sw.Write(ToJson(obj));
sw.Close();
return true;
}
}
/// <summary>
/// 将JSON对象保存到JSON文件
/// </summary>
/// <param name="obj">JSON对象</param>
/// <param name="path">文件路径(绝对路径)</param>
/// <param name="append">true 添加内容 false 覆盖</param>
/// <returns>true 保存成功 false 保存失败</returns>
public static bool ToFile(object obj, string path, bool append)
{
if (string.IsNullOrEmpty(path)) return false;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(path, append))
{
sw.Write(ToJson(obj));
sw.Close();
return true;
}
}
/// <summary>
/// 获取某路径下JSON中的数组数据
/// </summary>
/// <typeparam name="T">类型(可序列化)</typeparam>
/// <param name="path">路径</param>
/// <returns></returns>
public static List<T> GetListDataFromPath<T>(string path)
{
if (!System.IO.File.Exists(path))
{
Debug.Log("文件不存在 path:" + path);
return null;
}
return FromFile<List<T>>(path);
}
/// <summary>
/// 获取Json字符串中的对象,直接存成list
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="json">Json字符串</param>
/// <returns></returns>
public static List<T> GetListDataFromString<T>(string json)
{
return JsonConvert.DeserializeObject<List<T>>(json);
}
/// <summary>
/// 转化List对象成字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static string GetStringFromListData<T>(List<T> list)
{
return JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented);
}
/// <summary>
/// 将一组对象存储为Json字符串
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="path">存储路径</param>
/// <param name="list"></param>
public static void WriteListData<T>(string path, List<T> list)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(path, false))
{
string _json = JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented);
sw.Write(_json);
sw.Close();
}
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="dic">字典</param>
/// <param name="key">字典里具体键</param>
/// <returns></returns>
public static int GetIntValue(Dictionary<string, object> dic, string key)
{
object value = GetValue(dic, key);
if (value == null)
{
return 0;
}
int intValue;
if (int.TryParse(value.ToString(), out intValue) == false)
{
Debug.Log(int.Parse(value.ToString()));
Debug.LogError("Value 转换失败 " + intValue);
}
return intValue;
}
public static string GetStringValue(Dictionary<string, object> from, string property)
{
object value = GetValue(from, property);
if (value == null)
{
return "";
}
return value.ToString();
}
public static object GetValue(Dictionary<string, object> from, string property)
{
if (from == null)
{
Debug.LogError("Dictionary<string, object> from = " + null);
return null;
}
object value;
if (from.TryGetValue(property, out value))
{
return value;
}
Debug.LogError("不存在property = " + property);
return null;
}
}
}