From f98cc6ff5aa0e717b29ef994d449a62af95838fa Mon Sep 17 00:00:00 2001 From: xRain Date: Mon, 23 Oct 2023 17:39:27 +0800 Subject: [PATCH] add common json options --- Helpers/SimApiUtil.cs | 36 +++++++++++++++++++----------------- Synapse/EventClient.cs | 7 ++----- Synapse/EventServer.cs | 9 ++------- Synapse/RpcClient.cs | 12 ++---------- Synapse/RpcServer.cs | 15 ++++----------- 5 files changed, 29 insertions(+), 50 deletions(-) diff --git a/Helpers/SimApiUtil.cs b/Helpers/SimApiUtil.cs index 6eba65b..14023d2 100644 --- a/Helpers/SimApiUtil.cs +++ b/Helpers/SimApiUtil.cs @@ -3,6 +3,7 @@ using System.Security.Cryptography; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; +using System.Text.Json.Serialization; using System.Text.RegularExpressions; using System.Text.Unicode; @@ -13,18 +14,22 @@ namespace SimApi.Helpers /// /// 当前CST时间 /// - public static DateTime CstNow + public static DateTime CstNow => DateTime.UtcNow.AddHours(8); + + /// + /// JSON序列化常规选项 + /// + public static JsonSerializerOptions JsonOption => new() { - get => DateTime.UtcNow.AddHours(8); - } + Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull + }; /// /// 当前秒级时间戳 /// - public static double TimestampNow - { - get => (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds; - } + public static double TimestampNow => (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds; /// /// 检测手机号是否正确 @@ -45,13 +50,13 @@ namespace SimApi.Helpers /// public static string Md5(string source, string mode = "x2") { - byte[] sor = Encoding.UTF8.GetBytes(source); - MD5 md5 = MD5.Create(); - byte[] result = md5.ComputeHash(sor); - StringBuilder strbul = new StringBuilder(40); - for (int i = 0; i < result.Length; i++) + var sor = Encoding.UTF8.GetBytes(source); + var md5 = MD5.Create(); + var result = md5.ComputeHash(sor); + var strbul = new StringBuilder(40); + foreach (var t in result) { - strbul.Append(result[i].ToString(mode)); + strbul.Append(t.ToString(mode)); } return strbul.ToString(); @@ -64,10 +69,7 @@ namespace SimApi.Helpers /// public static string Json(object obj) { - return JsonSerializer.Serialize(obj, new JsonSerializerOptions - { - Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) - }); + return JsonSerializer.Serialize(obj, JsonOption); } } } \ No newline at end of file diff --git a/Synapse/EventClient.cs b/Synapse/EventClient.cs index f2f5ef8..2e3f87e 100644 --- a/Synapse/EventClient.cs +++ b/Synapse/EventClient.cs @@ -4,6 +4,7 @@ using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Unicode; using Microsoft.Extensions.Logging; +using SimApi.Helpers; namespace SimApi; @@ -16,11 +17,7 @@ public partial class Synapse private void FireEvent(string eventName, object param) { - var paramJson = JsonSerializer.Serialize(param, new JsonSerializerOptions - { - Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - }); + var paramJson = JsonSerializer.Serialize(param, SimApiUtil.JsonOption); var router = $"event.{Options.AppName}.{eventName}"; var props = EventClientChannel.CreateBasicProperties(); props.AppId = Options.AppId; diff --git a/Synapse/EventServer.cs b/Synapse/EventServer.cs index 5754c68..5b2b843 100644 --- a/Synapse/EventServer.cs +++ b/Synapse/EventServer.cs @@ -5,6 +5,7 @@ using System.Text.Json; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using RabbitMQ.Client.Events; +using SimApi.Helpers; namespace SimApi; @@ -35,13 +36,7 @@ public partial class Synapse { mt.Invoke(callClass, pt == typeof(string) ? new object[] { reqBody } - : new[] - { - JsonSerializer.Deserialize(reqBody, pt, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase - }) - }); + : new[] { JsonSerializer.Deserialize(reqBody, pt, SimApiUtil.JsonOption) }); EventServerChannel.BasicAck(ea.DeliveryTag, false); } catch (Exception e) diff --git a/Synapse/RpcClient.cs b/Synapse/RpcClient.cs index 2ab8b6c..a0cc75c 100644 --- a/Synapse/RpcClient.cs +++ b/Synapse/RpcClient.cs @@ -38,11 +38,7 @@ public partial class Synapse private object FireRpc(string app, string action, object param) { - var paramJson = JsonSerializer.Serialize(param, new JsonSerializerOptions - { - Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - }); + var paramJson = JsonSerializer.Serialize(param, SimApiUtil.JsonOption); var router = $"server.{app}"; SimApiBaseResponse response; var props = RpcClientChannel.CreateBasicProperties(); @@ -65,11 +61,7 @@ public partial class Synapse if (ResponseCache.TryGetValue(props.MessageId, out var value)) { response = JsonSerializer.Deserialize>( - Encoding.UTF8.GetString(value), new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) - }); + Encoding.UTF8.GetString(value), SimApiUtil.JsonOption); ResponseCache.Remove(props.MessageId); break; } diff --git a/Synapse/RpcServer.cs b/Synapse/RpcServer.cs index 7706e18..cc857bb 100644 --- a/Synapse/RpcServer.cs +++ b/Synapse/RpcServer.cs @@ -4,6 +4,7 @@ using System.Reflection; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; +using System.Text.Json.Serialization; using System.Text.Unicode; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -48,10 +49,7 @@ public partial class Synapse } else { - var paramObj = JsonSerializer.Deserialize(reqBody, pt, new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase - }); + var paramObj = JsonSerializer.Deserialize(reqBody, pt, SimApiUtil.JsonOption); param = new[] { paramObj }; } var ret = mt.Invoke(callClass, param); @@ -59,9 +57,8 @@ public partial class Synapse } catch (TargetInvocationException e) { - if (e.InnerException is SimApiException) + if (e.InnerException is SimApiException ie) { - var ie = e.InnerException as SimApiException; Logger.LogDebug("RPC调用错误: {Err}", ie.Message); res = new SimApiBaseResponse(ie.Code, ie.Message); } @@ -77,11 +74,7 @@ public partial class Synapse } } - var returnJson = JsonSerializer.Serialize((object)res, new JsonSerializerOptions - { - Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - }); + var returnJson = JsonSerializer.Serialize((object)res, SimApiUtil.JsonOption); var reply = $"client.{ea.BasicProperties.ReplyTo}.{ea.BasicProperties.AppId}"; var props = RpcServerChannel.CreateBasicProperties(); props.AppId = Options.AppId;