using System.Collections;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Unicode;
using Milimoe.FunGame.Core.Library.Common.Architecture;
using Milimoe.FunGame.Core.Service;
namespace Milimoe.FunGame.Core.Api.Utility
{
///
/// Json工具类
/// 此工具类拥有单独的序列化选项,支持添加自定义转换器
/// 继承自
///
public class JsonTool
{
///
/// 默认的序列化选项
///
public static JsonSerializerOptions JsonSerializerOptions => JsonManager.GeneralOptions;
///
/// 序列化选项
///
public JsonSerializerOptions Options { get; set; } = new();
///
/// 创建一个Json工具类
/// 此工具类拥有单独的序列化选项,支持添加自定义转换器
/// 继承自
///
public JsonTool()
{
Options.WriteIndented = JsonSerializerOptions.WriteIndented;
Options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
Options.ReferenceHandler = ReferenceHandler.IgnoreCycles;
foreach (JsonConverter converter in JsonSerializerOptions.Converters)
{
Options.Converters.Add(converter);
}
}
///
/// 注册一个自定义转换器,支持
///
///
public void AddConverter(JsonConverter converter)
{
if (!Options.Converters.Contains(converter))
Options.Converters.Add(converter);
}
///
/// 注册多个自定义转换器,支持
///
///
public void AddConverters(IEnumerable converters)
{
foreach (JsonConverter converter in converters)
{
AddConverter(converter);
}
}
///
/// 获取Json字符串
///
///
///
///
public string GetString(T obj) => JsonManager.GetString(obj, Options);
///
/// 反序列化Json对象
///
///
///
///
public T? GetObject(string json) => JsonManager.GetObject(json, Options);
///
/// 反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别
///
///
///
public object? GetObject(string json) => JsonManager.GetObject(json, Options);
///
/// 反序列化Hashtable中Key对应的Json对象
///
///
///
///
///
public T? GetObject(Hashtable table, string key) => JsonManager.GetObject(table, key, Options);
///
/// 反序列化Dictionary中Key对应的Json对象
///
///
///
///
///
public T? GetObject(Dictionary dict, string key) => JsonManager.GetObject(dict, key, Options);
///
/// 反序列化IEnumerable中的Json对象 可指定反序列化选项
///
///
///
///
///
public T? JsonDeserializeFromIEnumerable(IEnumerable