瀏覽代碼

修改序列化库为Newtonsoft.Json

zuohuaijun 3 年之前
父節點
當前提交
3c1a6a377b

+ 6 - 5
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -20,16 +20,17 @@
 
   <ItemGroup>
     <PackageReference Include="Caching.CSRedis" Version="3.8.2" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="3.5.7" />
-    <PackageReference Include="Furion.Extras.Logging.Serilog" Version="3.5.7" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="3.5.7" />
-    <PackageReference Include="Furion.Pure" Version="3.5.7" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="3.6.0" />
+    <PackageReference Include="Furion.Extras.Logging.Serilog" Version="3.6.0" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="3.6.0" />
+    <PackageReference Include="Furion.Pure" Version="3.6.0" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.6.4" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.6" />
     <PackageReference Include="MySql.Data" Version="8.0.29" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.5" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.14.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.10.0" />
-    <PackageReference Include="SqlSugarCore" Version="5.0.9" />
+    <PackageReference Include="SqlSugarCore" Version="5.0.9.1" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.18" />
     <PackageReference Include="UAParser" Version="3.1.47" />
     <PackageReference Include="Yitter.IdGenerator" Version="1.0.12" />

+ 28 - 0
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -6795,6 +6795,34 @@
             <param name="dataType"></param>
             <returns></returns>
         </member>
+        <member name="T:Admin.NET.Core.Util.NewtonsoftJsonSerializerProvider">
+            <summary>
+            Newtonsoft.Json 实现
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.Util.NewtonsoftJsonSerializerProvider.Serialize(System.Object,System.Object)">
+            <summary>
+            序列化对象
+            </summary>
+            <param name="value"></param>
+            <param name="jsonSerializerOptions"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.Util.NewtonsoftJsonSerializerProvider.Deserialize``1(System.String,System.Object)">
+            <summary>
+            反序列化字符串
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="json"></param>
+            <param name="jsonSerializerOptions"></param>
+            <returns></returns>
+        </member>
+        <member name="M:Admin.NET.Core.Util.NewtonsoftJsonSerializerProvider.GetSerializerOptions">
+            <summary>
+            返回读取全局配置的 JSON 选项
+            </summary>
+            <returns></returns>
+        </member>
         <member name="T:Admin.NET.Core.CommonUtil">
             <summary>
             通用工具类

+ 3 - 1
Admin.NET/Admin.NET.Core/Hub/ChatHub.cs

@@ -1,10 +1,12 @@
-using Microsoft.AspNetCore.SignalR;
+using Furion.InstantMessaging;
+using Microsoft.AspNetCore.SignalR;
 
 namespace Admin.NET.Core;
 
 /// <summary>
 /// 聊天集线器
 /// </summary>
+[MapHub("/hub/chathub")]
 public class ChatHub : Hub<IChatClient>
 {
     private readonly ISysCacheService _cache;

+ 41 - 0
Admin.NET/Admin.NET.Core/Util/JsonSerializerProvider.cs

@@ -0,0 +1,41 @@
+using Newtonsoft.Json;
+
+namespace Admin.NET.Core.Util;
+
+/// <summary>
+/// Newtonsoft.Json 实现
+/// </summary>
+public class JsonSerializerProvider : IJsonSerializerProvider, ISingleton
+{
+    /// <summary>
+    /// 序列化对象
+    /// </summary>
+    /// <param name="value"></param>
+    /// <param name="jsonSerializerOptions"></param>
+    /// <returns></returns>
+    public string Serialize(object value, object jsonSerializerOptions = null)
+    {
+        return JsonConvert.SerializeObject(value, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
+    }
+
+    /// <summary>
+    /// 反序列化字符串
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="json"></param>
+    /// <param name="jsonSerializerOptions"></param>
+    /// <returns></returns>
+    public T Deserialize<T>(string json, object jsonSerializerOptions = null)
+    {
+        return JsonConvert.DeserializeObject<T>(json, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
+    }
+
+    /// <summary>
+    /// 返回读取全局配置的 JSON 选项
+    /// </summary>
+    /// <returns></returns>
+    public object GetSerializerOptions()
+    {
+        return App.GetOptions<MvcNewtonsoftJsonOptions>()?.SerializerSettings;
+    }
+}

+ 7 - 10
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -4,12 +4,10 @@ using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
 using OnceMi.AspNetCore.OSS;
 using Serilog;
-using System.Text.Encodings.Web;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-using System.Text.Unicode;
 using Yitter.IdGenerator;
 
 namespace Admin.NET.Web.Core
@@ -40,13 +38,12 @@ namespace Admin.NET.Web.Core
 
             services.AddControllersWithViews()
                 .AddMvcFilter<RequestActionFilter>()
-                .AddJsonOptions(options =>
+                .AddNewtonsoftJson(options =>
                 {
-                    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 响应驼峰命名
-                    options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; // 忽略大小写
-                    options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; // 忽略循环引用
-                    options.JsonSerializerOptions.Converters.AddDateFormatString("yyyy-MM-dd HH:mm:ss"); // 时间格式化
-                    options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); // 中文编码
+                    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 响应驼峰命名
+                    options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
+                    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用
+                    // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; // 忽略空值
                 })
                 .AddInjectWithUnifyResult<AdminResultProvider>();