using System.Text.Json; using System.Text.Json.Serialization; using Milimoe.FunGame.Core.Library.Common.JsonConverter; namespace Milimoe.FunGame.Core.Service { public class JsonManager { private static bool _IsFirst = true; private readonly static JsonSerializerOptions _GeneralOptions = new() { WriteIndented = true, ReferenceHandler = ReferenceHandler.IgnoreCycles }; /// /// 默认的JsonSerializerOptions /// internal static JsonSerializerOptions GeneralOptions { get { if (_IsFirst) { // 首次使用时,向其添加自定义转换器 _IsFirst = false; AddConverter(new DataSetConverter()); AddConverter(new DateTimeConverter()); } return _GeneralOptions; } } /// /// 注册一个自定义转换器 /// /// internal static void AddConverter(JsonConverter converter) { _GeneralOptions.Converters.Add(converter); } /// /// 获取Json字符串 /// /// /// /// public static string GetString(T obj) { return JsonSerializer.Serialize(obj, GeneralOptions); } /// /// 反序列化Json对象 /// /// /// /// public static T? GetObject(string json) { return JsonSerializer.Deserialize(json, GeneralOptions); } /// /// 反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别 /// /// /// public static object? GetObject(string json) { return JsonSerializer.Deserialize(json, GeneralOptions); } /// /// 反序列化多个Json对象 /// 注意必须是相同的Json对象才可以使用此方法解析 /// /// /// /// public static List GetObjects(string json) { json = "[" + json.Replace("}{", "},{") + "]"; // 将Json字符串转换为数组 return JsonSerializer.Deserialize>(json, GeneralOptions) ?? new List(); } } }