向Utility添加更多Json相关方法 (#45)

This commit is contained in:
milimoe 2023-07-27 09:10:29 +08:00 committed by GitHub
parent 9631267010
commit 9fb45dc502
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 111 additions and 1 deletions

View File

@ -1,6 +1,7 @@
using System.Collections;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Text.Json;
using System.Text.RegularExpressions;
using Milimoe.FunGame.Core.Library.Common.Architecture;
using Milimoe.FunGame.Core.Library.Constant;
@ -128,6 +129,18 @@ namespace Milimoe.FunGame.Core.Api.Utility
return Service.JsonManager.GetString(obj);
}
/// <summary>
/// 返回目标对象的Json字符串 可指定反序列化选项
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="options"></param>
/// <returns></returns>
public static string JsonSerialize<T>(T obj, JsonSerializerOptions options)
{
return Service.JsonManager.GetString(obj, options);
}
/// <summary>
/// 反序列化Json对象
/// </summary>
@ -139,6 +152,18 @@ namespace Milimoe.FunGame.Core.Api.Utility
return Service.JsonManager.GetObject<T>(json);
}
/// <summary>
/// 反序列化Json对象 可指定反序列化选项
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <param name="options"></param>
/// <returns></returns>
public static T? JsonDeserialize<T>(string json, JsonSerializerOptions options)
{
return Service.JsonManager.GetObject<T>(json, options);
}
/// <summary>
/// 反序列化Hashtable中的Json对象
/// </summary>
@ -148,7 +173,20 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <returns></returns>
public static T? JsonDeserializeFromHashtable<T>(Hashtable hashtable, string key)
{
return Transmittal.DataRequest.GetHashtableJsonObject<T>(hashtable, key);
return Service.JsonManager.GetObject<T>(hashtable, key);
}
/// <summary>
/// 反序列化Hashtable中的Json对象 可指定反序列化选项
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="hashtable"></param>
/// <param name="key"></param>
/// <param name="options"></param>
/// <returns></returns>
public static T? JsonDeserializeFromHashtable<T>(Hashtable hashtable, string key, JsonSerializerOptions options)
{
return Service.JsonManager.GetObject<T>(hashtable, key, options);
}
}

View File

@ -38,6 +38,18 @@ namespace Milimoe.FunGame.Core.Service
return JsonSerializer.Serialize(obj, GeneralOptions);
}
/// <summary>
/// 获取Json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="options"></param>
/// <returns></returns>
internal static string GetString<T>(T obj, JsonSerializerOptions options)
{
return JsonSerializer.Serialize(obj, options);
}
/// <summary>
/// 反序列化Json对象
/// </summary>
@ -49,6 +61,18 @@ namespace Milimoe.FunGame.Core.Service
return JsonSerializer.Deserialize<T>(json, GeneralOptions);
}
/// <summary>
/// 反序列化Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <param name="options"></param>
/// <returns></returns>
internal static T? GetObject<T>(string json, JsonSerializerOptions options)
{
return JsonSerializer.Deserialize<T>(json, options);
}
/// <summary>
/// 反序列化Json对象此方法可能无法返回正确的类型请注意辨别
/// </summary>
@ -59,6 +83,18 @@ namespace Milimoe.FunGame.Core.Service
return JsonSerializer.Deserialize<object>(json, GeneralOptions);
}
/// <summary>
/// 反序列化Json对象此方法可能无法返回正确的类型请注意辨别
/// </summary>
/// <param name="json"></param>
/// <param name=""></param>
/// <param name="options"></param>
/// <returns></returns>
internal static object? GetObject(string json, JsonSerializerOptions options)
{
return JsonSerializer.Deserialize<object>(json, options);
}
/// <summary>
/// 反序列化SocketObject中索引为index的Json对象
/// </summary>
@ -96,6 +132,28 @@ namespace Milimoe.FunGame.Core.Service
return default;
}
/// <summary>
/// 反序列化Hashtable中Key对应的Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="table"></param>
/// <param name="key"></param>
/// <param name="options"></param>
/// <returns></returns>
internal static T? GetObject<T>(Hashtable table, string key, JsonSerializerOptions options)
{
if (table.ContainsKey(key))
{
JsonElement? element = (JsonElement?)table[key];
if (element != null)
{
T? result = ((JsonElement)element).Deserialize<T>(options);
return result;
}
}
return default;
}
/// <summary>
/// 反序列化多个Json对象
/// 注意必须是相同的Json对象才可以使用此方法解析
@ -108,5 +166,19 @@ namespace Milimoe.FunGame.Core.Service
json = "[" + json.Replace("}{", "},{") + "]"; // 将Json字符串转换为数组
return JsonSerializer.Deserialize<List<T>>(json, GeneralOptions) ?? new List<T>();
}
/// <summary>
/// 反序列化多个Json对象
/// 注意必须是相同的Json对象才可以使用此方法解析
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <param name="options"></param>
/// <returns></returns>
internal static List<T> GetObjects<T>(string json, JsonSerializerOptions options)
{
json = "[" + json.Replace("}{", "},{") + "]"; // 将Json字符串转换为数组
return JsonSerializer.Deserialize<List<T>>(json, options) ?? new List<T>();
}
}
}