diff --git a/Api/Utility/JsonTool.cs b/Api/Utility/JsonTool.cs index 399b7e3..13fffdc 100644 --- a/Api/Utility/JsonTool.cs +++ b/Api/Utility/JsonTool.cs @@ -1,32 +1,54 @@ -using System.Collections; +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.Library.Common.JsonConverter; using Milimoe.FunGame.Core.Service; namespace Milimoe.FunGame.Core.Api.Utility { /// - /// 创建一个Json工具类 + /// 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 static void AddConverter(JsonConverter converter) + public void AddConverter(JsonConverter converter) { - if (!JsonSerializerOptions.Converters.Contains(converter)) - JsonSerializerOptions.Converters.Add(converter); + if (!Options.Converters.Contains(converter)) + Options.Converters.Add(converter); } /// @@ -47,7 +69,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public string GetString(T obj) => JsonManager.GetString(obj, JsonSerializerOptions); + public string GetString(T obj) => JsonManager.GetString(obj, Options); /// /// 反序列化Json对象 @@ -55,14 +77,14 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? GetObject(string json) => JsonManager.GetObject(json, JsonSerializerOptions); + public T? GetObject(string json) => JsonManager.GetObject(json, Options); /// /// 反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别 /// /// /// - public object? GetObject(string json) => JsonManager.GetObject(json, JsonSerializerOptions); + public object? GetObject(string json) => JsonManager.GetObject(json, Options); /// /// 反序列化Hashtable中Key对应的Json对象 @@ -71,7 +93,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? GetObject(Hashtable table, string key) => JsonManager.GetObject(table, key, JsonSerializerOptions); + public T? GetObject(Hashtable table, string key) => JsonManager.GetObject(table, key, Options); /// /// 反序列化Dictionary中Key对应的Json对象 @@ -80,7 +102,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? GetObject(Dictionary dict, string key) => JsonManager.GetObject(dict, key, JsonSerializerOptions); + public T? GetObject(Dictionary dict, string key) => JsonManager.GetObject(dict, key, Options); /// /// 反序列化IEnumerable中的Json对象 可指定反序列化选项 @@ -89,7 +111,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? JsonDeserializeFromIEnumerable(IEnumerable e, int index) => JsonManager.GetObject(e, index, JsonSerializerOptions); + public T? JsonDeserializeFromIEnumerable(IEnumerable e, int index) => JsonManager.GetObject(e, index, Options); /// /// 反序列化多个Json对象 @@ -98,6 +120,6 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public List GetObjects(string json) => JsonManager.GetObjects(json, JsonSerializerOptions); + public List GetObjects(string json) => JsonManager.GetObjects(json, Options); } } diff --git a/Controller/BaseAddonController.cs b/Controller/BaseAddonController.cs index 88497da..4533da3 100644 --- a/Controller/BaseAddonController.cs +++ b/Controller/BaseAddonController.cs @@ -1,4 +1,5 @@ -using Milimoe.FunGame.Core.Interface.Addons; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Constant; @@ -41,6 +42,11 @@ namespace Milimoe.FunGame.Core.Controller /// public void Error(Exception e) => MaskMethod_Error(e); + /// + /// JSON 工具类对象 + /// + public JsonTool JSON { get; } = new(); + /// /// 新建一个BaseAddonController /// diff --git a/Controller/ServerAddonController.cs b/Controller/ServerAddonController.cs index e384673..0cb3cb4 100644 --- a/Controller/ServerAddonController.cs +++ b/Controller/ServerAddonController.cs @@ -1,4 +1,4 @@ -using Milimoe.FunGame.Core.Api.Transmittal; +using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Library.SQLScript.Common; @@ -17,7 +17,7 @@ namespace Milimoe.FunGame.Core.Controller public class ServerAddonController(IAddon addon, Dictionary delegates) : BaseAddonController(addon, delegates), IServerAddon where T : IAddon { /// - /// 数据库连接器 + /// 数据库连接器 [ 后台长连接仅查询专用,请勿用于事务、更新和新增,对应需求请使用: ] /// public SQLHelper? SQLHelper => _sqlHelper; @@ -32,7 +32,16 @@ namespace Milimoe.FunGame.Core.Controller private CancellationTokenSource? _cts = null; /// - /// 新建 SQLHelper + /// 获取一个可以用来进行事务操作、更新/新增数据的数据库连接器 [ 请使用 using Controller.GetSQLHelper() 来让它能够自动释放 ] + /// + /// + public SQLHelper? GetSQLHelper() + { + return Factory.OpenFactory.GetSQLHelper(); + } + + /// + /// 新建 SQLHelper [ 后台长连接仅查询专用,请勿用于事务、更新和新增,对应需求请使用: ] /// public void NewSQLHelper() { @@ -55,7 +64,7 @@ namespace Milimoe.FunGame.Core.Controller // 每两小时触发一次SQL服务器的心跳查询,防止SQL服务器掉线 try { - await Task.Delay(2 * 1000 * 3600); + await Task.Delay(2 * 1000 * 3600, _cts.Token); _sqlHelper?.ExecuteDataSet(ServerLoginLogs.Select_GetLastLoginTime()); } catch (OperationCanceledException)