新的Json处理方法 (#63)

This commit is contained in:
milimoe 2023-11-28 09:59:17 +08:00 committed by GitHub
parent 543887881a
commit 47d9813793
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 135 additions and 25 deletions

View File

@ -125,10 +125,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string JsonSerialize<T>(T obj)
{
return Service.JsonManager.GetString(obj);
}
public static string JsonSerialize<T>(T obj) => Service.JsonManager.GetString(obj);
/// <summary>
/// 返回目标对象的Json字符串 可指定反序列化选项
@ -137,10 +134,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <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);
}
public static string JsonSerialize<T>(T obj, JsonSerializerOptions options) => Service.JsonManager.GetString(obj, options);
/// <summary>
/// 反序列化Json对象
@ -148,10 +142,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T? JsonDeserialize<T>(string json)
{
return Service.JsonManager.GetObject<T>(json);
}
public static T? JsonDeserialize<T>(string json) => Service.JsonManager.GetObject<T>(json);
/// <summary>
/// 反序列化Json对象 可指定反序列化选项
@ -160,10 +151,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <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);
}
public static T? JsonDeserialize<T>(string json, JsonSerializerOptions options) => Service.JsonManager.GetObject<T>(json, options);
/// <summary>
/// 反序列化Hashtable中的Json对象
@ -172,10 +160,26 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <param name="hashtable"></param>
/// <param name="key"></param>
/// <returns></returns>
public static T? JsonDeserializeFromHashtable<T>(Hashtable hashtable, string key)
{
return Service.JsonManager.GetObject<T>(hashtable, key);
}
public static T? JsonDeserializeFromHashtable<T>(Hashtable hashtable, string key) => Service.JsonManager.GetObject<T>(hashtable, key);
/// <summary>
/// 反序列化IEnumerable中的Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="e"></param>
/// <param name="index"></param>
/// <returns></returns>
public static T? JsonDeserializeFromIEnumerable<T>(IEnumerable<object> e, int index) => Service.JsonManager.GetObject<T>(e, index);
/// <summary>
/// 反序列化IEnumerable中的Json对象 可指定反序列化选项
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="e"></param>
/// <param name="index"></param>
/// <param name="options"></param>
/// <returns></returns>
public static T? JsonDeserializeFromIEnumerable<T>(IEnumerable<object> e, int index, JsonSerializerOptions options) => Service.JsonManager.GetObject<T>(e, index, options);
/// <summary>
/// 反序列化Hashtable中的Json对象 可指定反序列化选项
@ -185,10 +189,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <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);
}
public static T? JsonDeserializeFromHashtable<T>(Hashtable hashtable, string key, JsonSerializerOptions options) => Service.JsonManager.GetObject<T>(hashtable, key, options);
}
#endregion

View File

@ -75,6 +75,15 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <returns></returns>
public T? GetObject<T>(Hashtable table, string key) => JsonManager.GetObject<T>(table, key, options);
/// <summary>
/// 反序列化IEnumerable中的Json对象 可指定反序列化选项
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="e"></param>
/// <param name="index"></param>
/// <returns></returns>
public T? JsonDeserializeFromIEnumerable<T>(IEnumerable<object> e, int index) => JsonManager.GetObject<T>(e, index, options);
/// <summary>
/// 反序列化多个Json对象
/// 注意必须是相同的Json对象才可以使用此方法解析
@ -91,7 +100,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
{
WriteIndented = true,
ReferenceHandler = ReferenceHandler.IgnoreCycles,
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter() }
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter() }
};
}
}

View File

@ -428,6 +428,25 @@
<param name="key"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Api.Utility.NetworkUtility.JsonDeserializeFromIEnumerable``1(System.Collections.Generic.IEnumerable{System.Object},System.Int32)">
<summary>
反序列化IEnumerable中的Json对象
</summary>
<typeparam name="T"></typeparam>
<param name="e"></param>
<param name="index"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Api.Utility.NetworkUtility.JsonDeserializeFromIEnumerable``1(System.Collections.Generic.IEnumerable{System.Object},System.Int32,System.Text.Json.JsonSerializerOptions)">
<summary>
反序列化IEnumerable中的Json对象 可指定反序列化选项
</summary>
<typeparam name="T"></typeparam>
<param name="e"></param>
<param name="index"></param>
<param name="options"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Api.Utility.NetworkUtility.JsonDeserializeFromHashtable``1(System.Collections.Hashtable,System.String,System.Text.Json.JsonSerializerOptions)">
<summary>
反序列化Hashtable中的Json对象 可指定反序列化选项
@ -655,6 +674,15 @@
<param name="key"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Api.Utility.JsonTool.JsonDeserializeFromIEnumerable``1(System.Collections.Generic.IEnumerable{System.Object},System.Int32)">
<summary>
反序列化IEnumerable中的Json对象 可指定反序列化选项
</summary>
<typeparam name="T"></typeparam>
<param name="e"></param>
<param name="index"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Api.Utility.JsonTool.GetObjects``1(System.String)">
<summary>
反序列化多个Json对象
@ -1931,6 +1959,25 @@
<param name="key"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Service.JsonManager.GetObject``1(System.Collections.Generic.IEnumerable{System.Object},System.Int32)">
<summary>
反序列化IEnumerable中的Json对象
</summary>
<typeparam name="T"></typeparam>
<param name="e"></param>
<param name="index"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Service.JsonManager.GetObject``1(System.Collections.Generic.IEnumerable{System.Object},System.Int32,System.Text.Json.JsonSerializerOptions)">
<summary>
反序列化IEnumerable中的Json对象
</summary>
<typeparam name="T"></typeparam>
<param name="e"></param>
<param name="index"></param>
<param name="options"></param>
<returns></returns>
</member>
<member name="M:Milimoe.FunGame.Core.Service.JsonManager.GetObject``1(System.Collections.Hashtable,System.String,System.Text.Json.JsonSerializerOptions)">
<summary>
反序列化Hashtable中Key对应的Json对象

View File

@ -54,6 +54,14 @@ namespace Milimoe.FunGame.Core.Library.Common.JsonConverter
room.RoomType = (RoomType)reader.GetInt64();
break;
case RoomQuery.Column_GameMode:
room.GameMode = reader.GetString() ?? "";
break;
case RoomQuery.Column_GameMap:
room.GameMap = reader.GetString() ?? "";
break;
case RoomQuery.Column_RoomState:
room.RoomState = (RoomState)reader.GetInt64();
break;

View File

@ -122,6 +122,51 @@ namespace Milimoe.FunGame.Core.Service
return default;
}
/// <summary>
/// 反序列化IEnumerable中的Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="e"></param>
/// <param name="index"></param>
/// <returns></returns>
internal static T? GetObject<T>(IEnumerable<object> e, int index)
{
IEnumerable<JsonElement> elements = e.Cast<JsonElement>();
if (elements.Count() > index)
{
JsonElement? element = (JsonElement?)elements.ElementAt(index);
if (element != null)
{
T? result = ((JsonElement)element).Deserialize<T>(GeneralOptions);
return result;
}
}
return default;
}
/// <summary>
/// 反序列化IEnumerable中的Json对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="e"></param>
/// <param name="index"></param>
/// <param name="options"></param>
/// <returns></returns>
internal static T? GetObject<T>(IEnumerable<object> e, int index, JsonSerializerOptions options)
{
IEnumerable<JsonElement> elements = e.Cast<JsonElement>();
if (elements.Count() > index)
{
JsonElement? element = (JsonElement?)elements.ElementAt(index);
if (element != null)
{
T? result = ((JsonElement)element).Deserialize<T>(options);
return result;
}
}
return default;
}
/// <summary>
/// 反序列化Hashtable中Key对应的Json对象
/// </summary>