Просмотр исходного кода

feat: 统一 Api 与 SignalR 的序列化为 Newtonsoft

许俊杰 2 лет назад
Родитель
Сommit
7ff843142d

+ 1 - 0
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -27,6 +27,7 @@
     <PackageReference Include="Magicodes.IE.Excel" Version="2.7.4.5" />
     <PackageReference Include="Magicodes.IE.Pdf" Version="2.7.4.5" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.20" />
+    <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="6.0.20" />
     <PackageReference Include="NEST" Version="7.17.5" />
     <PackageReference Include="NewLife.Redis" Version="5.4.2023.601" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.9" />

+ 15 - 13
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -67,20 +67,22 @@ public class Startup : AppStartup
             options.IgnorePropertyTypes = new[] { typeof(byte[]) };
         });
 
+        void SetJsonSetting(JsonSerializerSettings setting)
+        {
+            setting.DateTimeZoneHandling = DateTimeZoneHandling.Local;
+                setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
+                setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用
+                // setting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写
+                // setting.NullValueHandling = NullValueHandling.Ignore; // 忽略空值
+                // setting.Converters.AddLongTypeConverters(); // long转string(防止js精度溢出) 超过16位开启
+                // setting.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; // 解决DateTimeOffset异常
+                // setting.DateParseHandling = DateParseHandling.None; // 解决DateTimeOffset异常
+                // setting.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }); // 解决DateTimeOffset异常
+        }
+
         services.AddControllersWithViews()
             .AddAppLocalization()
-            .AddNewtonsoftJson(options =>
-            {
-                options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
-                options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
-                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // 忽略循环引用
-                // options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 解决动态对象属性名大写
-                // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; // 忽略空值
-                // options.SerializerSettings.Converters.AddLongTypeConverters(); // long转string(防止js精度溢出) 超过16位开启
-                // options.SerializerSettings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; // 解决DateTimeOffset异常
-                // options.SerializerSettings.DateParseHandling = DateParseHandling.None; // 解决DateTimeOffset异常
-                // options.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }); // 解决DateTimeOffset异常
-            })
+            .AddNewtonsoftJson(options => SetJsonSetting(options.SerializerSettings))
             //.AddXmlSerializerFormatters()
             //.AddXmlDataContractSerializerFormatters()
             .AddInjectWithUnifyResult<AdminResultProvider>();
@@ -159,7 +161,7 @@ public class Startup : AppStartup
             {
                 options.KeepAliveInterval = TimeSpan.FromSeconds(5);
             })
-            .AddJsonProtocol();
+            .AddNewtonsoftJsonProtocol(options => SetJsonSetting(options.PayloadSerializerSettings));
 
         // logo显示
         services.AddLogoDisplay();