Add JsonTool (#48)

* Add JsonTools

* Remove JsonManager.AddConverter
This commit is contained in:
milimoe 2023-08-02 09:16:19 +08:00 committed by GitHub
parent 2a1a85e338
commit 0f2d44e2f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 85 additions and 9 deletions

85
Api/Utility/JsonTool.cs Normal file
View File

@ -0,0 +1,85 @@
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
{
/// <summary>
/// 创建一个Json工具类<para/>
/// 此工具类拥有单独的序列化选项,支持添加自定义转换器 <see cref="BaseEntityConverter{T}"/><para/>
/// <see cref="BaseEntityConverter{T}"/> 继承自 <see cref="JsonConverter"/>
/// </summary>
public class JsonTool
{
/// <summary>
/// 序列化选项<para/>
/// 已经默认添加了下列转换器:<para/>
/// <see cref="DateTimeConverter"/>, <see cref="DataTableConverter"/>, <see cref="DataSetConverter"/>
/// </summary>
public JsonSerializerOptions JsonSerializerOptions => options;
/// <summary>
/// 注册一个自定义转换器,支持 <see cref="BaseEntityConverter{T}"/>
/// </summary>
/// <param name="converter"></param>
public void AddConverter(JsonConverter converter)
{
if (!JsonSerializerOptions.Converters.Contains(converter))
JsonSerializerOptions.Converters.Add(converter);
}
/// <summary>
/// 获取Json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public string GetString<T>(T obj) => JsonManager.GetString(obj, options);
/// <summary>
/// 反序列化Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public T? GetObject<T>(string json) => JsonManager.GetObject<T>(json, options);
/// <summary>
/// 反序列化Json对象此方法可能无法返回正确的类型请注意辨别
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public object? GetObject(string json) => JsonManager.GetObject(json, options);
/// <summary>
/// 反序列化Hashtable中Key对应的Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="table"></param>
/// <param name="key"></param>
/// <returns></returns>
public T? GetObject<T>(Hashtable table, string key) => JsonManager.GetObject<T>(table, key, options);
/// <summary>
/// 反序列化多个Json对象
/// 注意必须是相同的Json对象才可以使用此方法解析
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public List<T> GetObjects<T>(string json) => JsonManager.GetObjects<T>(json, options);
/// <summary>
/// Private JsonSerializerOptions
/// </summary>
private readonly JsonSerializerOptions options = new()
{
WriteIndented = true,
ReferenceHandler = ReferenceHandler.IgnoreCycles,
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter() }
};
}
}

View File

@ -18,15 +18,6 @@ namespace Milimoe.FunGame.Core.Service
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter() } Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter() }
}; };
/// <summary>
/// 注册一个自定义转换器
/// </summary>
/// <param name="converter"></param>
internal static void AddConverter(JsonConverter converter)
{
GeneralOptions.Converters.Add(converter);
}
/// <summary> /// <summary>
/// 获取Json字符串 /// 获取Json字符串
/// </summary> /// </summary>