using System.Collections; using System.Text.Json; using System.Text.Json.Serialization; 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工具类 /// 此工具类拥有单独的序列化选项,支持添加自定义转换器 /// 继承自 /// public class JsonTool { /// /// 序列化选项 /// 已经默认添加了下列转换器: /// , , /// public JsonSerializerOptions JsonSerializerOptions => options; /// /// 注册一个自定义转换器,支持 /// /// public void AddConverter(JsonConverter converter) { if (!JsonSerializerOptions.Converters.Contains(converter)) JsonSerializerOptions.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 e, int index) => JsonManager.GetObject(e, index, options); /// /// 反序列化多个Json对象 /// 注意必须是相同的Json对象才可以使用此方法解析 /// /// /// /// public List GetObjects(string json) => JsonManager.GetObjects(json, options); /// /// Private JsonSerializerOptions /// private readonly JsonSerializerOptions options = new() { WriteIndented = true, PropertyNameCaseInsensitive = true, ReferenceHandler = ReferenceHandler.IgnoreCycles, Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter(), new CharacterConverter(), new MagicResistanceConverter(), new EquipSlotConverter(), new SkillConverter(), new EffectConverter(), new ItemConverter() } }; } }