全新json解析方式

This commit is contained in:
Mili 2023-03-16 20:17:17 +08:00
parent 231f28541f
commit 3d5aee0a45
8 changed files with 49 additions and 68 deletions

View File

@ -10,9 +10,9 @@ namespace Milimoe.FunGame.Core.Api.Factory
return new User();
}
internal static User GetInstance(DataSet? ds)
internal static User GetInstance(DataSet? DataSet)
{
return new User(ds);
return new User(DataSet);
}
}
}

View File

@ -115,34 +115,6 @@ namespace Milimoe.FunGame.Core.Api.Utility
}
return -1;
}
/// <summary>
/// 将JsonElement转换为泛型
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="obj">为JsonElement的对象</param>
/// <returns></returns>
public static T? ConvertJsonObject<T>(object obj)
{
return ((JsonElement)obj).ToObject<T>();
}
}
/// <summary>
/// Json工具类
/// </summary>
internal static class JsonUtility
{
/// <summary>
/// 将JsonElement转换为泛型
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="element">JsonElement</param>
/// <returns></returns>
internal static T? ToObject<T>(this JsonElement element)
{
return JsonSerializer.Deserialize<T>(element.GetRawText());
}
}
#endregion

View File

@ -1,13 +1,13 @@
using Milimoe.FunGame.Core.Interface.Entity;
using System.Collections;
using System.Collections;
using Milimoe.FunGame.Core.Interface.Entity;
namespace Milimoe.FunGame.Core.Entity
{
public abstract class BaseEntity : IBaseEntity
{
public long Id { get; set; } = 0;
public Guid Guid { get; set; } = Guid.Empty;
public string Name { get; set; } = "";
public virtual long Id { get; set; } = 0;
public virtual Guid Guid { get; set; } = Guid.Empty;
public virtual string Name { get; set; } = "";
public abstract bool Equals(IBaseEntity? other);
public abstract IEnumerator<IBaseEntity> GetEnumerator();

View File

@ -6,7 +6,7 @@ namespace Milimoe.FunGame.Core.Entity
{
public class User : BaseEntity
{
public new long Id { get; set; }
public override long Id { get; set; }
public string Username { get; set; } = "";
public string Password { get; set; } = "";
public DateTime RegTime { get; set; }
@ -28,11 +28,11 @@ namespace Milimoe.FunGame.Core.Entity
}
internal User(DataSet? ds)
internal User(DataSet? DataSet)
{
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
if (DataSet != null && DataSet.Tables.Count > 0 && DataSet.Tables[0].Rows.Count > 0)
{
DataRow row = ds.Tables[0].Rows[0];
DataRow row = DataSet.Tables[0].Rows[0];
Id = (long)row[UserQuery.Column_UID];
Username = (string)row[UserQuery.Column_Username];
Password = (string)row[UserQuery.Column_Password];
@ -40,12 +40,12 @@ namespace Milimoe.FunGame.Core.Entity
LastTime = (DateTime)row[UserQuery.Column_LastTime];
Email = (string)row[UserQuery.Column_Email];
NickName = (string)row[UserQuery.Column_Nickname];
IsAdmin = (int)row[UserQuery.Column_IsAdmin] == 1;
IsOperator = (int)row[UserQuery.Column_IsOperator] == 1;
IsEnable = (int)row[UserQuery.Column_IsEnable] == 1;
Credits = (decimal)row[UserQuery.Column_Credits];
Materials = (decimal)row[UserQuery.Column_Materials];
GameTime = (decimal)row[UserQuery.Column_GameTime];
IsAdmin = Convert.ToInt32(row[UserQuery.Column_IsAdmin]) == 1;
IsOperator = Convert.ToInt32(row[UserQuery.Column_IsOperator]) == 1;
IsEnable = Convert.ToInt32(row[UserQuery.Column_IsEnable]) == 1;
Credits = Convert.ToDecimal(row[UserQuery.Column_Credits]);
Materials = Convert.ToDecimal(row[UserQuery.Column_Materials]);
GameTime = Convert.ToDecimal(row[UserQuery.Column_GameTime]);
AutoKey = (string)row[UserQuery.Column_AutoKey];
}
}

View File

@ -1,4 +1,5 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Library.Common.Network
@ -11,12 +12,21 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
public object[] Parameters { get; }
public string JsonString { get; }
private JArray? JArray;
public JsonObject(SocketMessageType MessageType, Guid Token, params object[] Parameters)
{
this.MessageType = MessageType;
this.Token = Token;
this.Parameters = Parameters;
this.JsonString = JsonConvert.SerializeObject(this);
this.JsonString = JsonConvert.SerializeObject(this, Formatting.Indented);
}
public T? GetObject<T>(int i)
{
if (i >= Parameters.Length) throw new IndexOutOfArrayLengthException();
JArray ??= JArray.FromObject(Parameters);
return JArray[i].ToObject<T>();
}
public static string GetString(SocketMessageType MessageType, Guid Token, params object[] Parameters)
@ -29,4 +39,5 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
return JsonConvert.DeserializeObject<JsonObject>(JsonString);
}
}
}

View File

@ -8,13 +8,24 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
public Guid Token { get; } = Guid.Empty;
public object[] Parameters { get; } = Array.Empty<object>();
public int Length { get; } = 0;
private JsonObject Json { get; }
public SocketObject(SocketMessageType type, Guid token, params object[] parameters)
public SocketObject(JsonObject json)
{
SocketType = type;
Token = token;
Parameters = parameters;
Length = parameters.Length;
Json = json;
SocketType = Json.MessageType;
Token = Json.Token;
Parameters = Json.Parameters;
Length = Parameters.Length;
}
public SocketObject()
{
Json = new JsonObject(SocketMessageType.Unknown, Guid.Empty, Array.Empty<object>());
SocketType = Json.MessageType;
Token = Json.Token;
Parameters = Json.Parameters;
Length = Parameters.Length;
}
/// <summary>
@ -24,18 +35,6 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
/// <param name="index">索引</param>
/// <returns>类型的参数</returns>
/// <exception cref="IndexOutOfArrayLengthException">索引超过数组上限</exception>
public T? GetParam<T>(int index)
{
if (index < Parameters.Length)
{
if (typeof(T) == typeof(Guid))
{
object param = Guid.Parse((string)Parameters[index]);
return (T)param;
}
return (T)Parameters[index];
}
throw new IndexOutOfArrayLengthException();
}
public T? GetParam<T>(int index) => Json.GetObject<T>(index);
}
}

View File

@ -170,7 +170,7 @@ namespace Milimoe.FunGame.Core.Service
Library.Common.Network.JsonObject? json = Library.Common.Network.JsonObject.GetObject(msg);
if (json != null)
{
result = new Library.Common.Network.SocketObject(json.MessageType, json.Token, json.Parameters);
result = new Library.Common.Network.SocketObject(json);
}
// 客户端接收消息广播ScoketObject到每个UIModel
OnSocketReceive(result);
@ -199,7 +199,7 @@ namespace Milimoe.FunGame.Core.Service
Library.Common.Network.JsonObject? json = Library.Common.Network.JsonObject.GetObject(msg);
if (json != null)
{
result = new Library.Common.Network.SocketObject(json.MessageType, json.Token, json.Parameters);
result = new Library.Common.Network.SocketObject(json);
}
return result;
}

View File

@ -3,7 +3,6 @@ using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library.Component;
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.UI;
@ -227,7 +226,7 @@ namespace Milimoe.FunGame.Desktop.Model
{
return Socket.Receive();
}
return new SocketObject(SocketMessageType.Unknown, Guid.Empty, Array.Empty<object>());
return new SocketObject();
}
private SocketMessageType Receiving()