From eab1e2d04853fe1b30ffa39559ed0c78f9673d8f Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Wed, 14 Jan 2026 16:37:23 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9AJson=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/TrackCenter.Api/DateTimeJsonConverter.cs | 32 ++++++++++++++++++++ src/TrackCenter.Api/LongJsonConverter.cs | 26 ++++++++++++++++ src/TrackCenter.Api/TrackCenterApiModule.cs | 11 +++++++ 3 files changed, 69 insertions(+) create mode 100644 src/TrackCenter.Api/DateTimeJsonConverter.cs create mode 100644 src/TrackCenter.Api/LongJsonConverter.cs diff --git a/src/TrackCenter.Api/DateTimeJsonConverter.cs b/src/TrackCenter.Api/DateTimeJsonConverter.cs new file mode 100644 index 00000000..f5f98b12 --- /dev/null +++ b/src/TrackCenter.Api/DateTimeJsonConverter.cs @@ -0,0 +1,32 @@ +using Newtonsoft.Json; + +namespace TrackCenter.Api; + +public class DateTimeJsonConverter: JsonConverter +{ + private readonly string _format; + + public DateTimeJsonConverter(string format = "yyyy-MM-dd HH:mm:ss") => this._format = format; + + public override bool CanConvert(Type objectType) + { + return objectType == typeof (DateTime) || objectType == typeof (DateTime?); + } + + public override object? ReadJson( + JsonReader reader, + Type objectType, + object? existingValue, + JsonSerializer serializer) + { + if (reader.Value == null || string.IsNullOrEmpty(reader.Value.ToString())) + return (object) null; + DateTime result; + return DateTime.TryParse(reader.Value.ToString(), out result) ? (object) result : (object) new DateTime(); + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + writer.WriteValue(((DateTime) value).ToString(this._format)); + } +} diff --git a/src/TrackCenter.Api/LongJsonConverter.cs b/src/TrackCenter.Api/LongJsonConverter.cs new file mode 100644 index 00000000..82cd9ed7 --- /dev/null +++ b/src/TrackCenter.Api/LongJsonConverter.cs @@ -0,0 +1,26 @@ +using Newtonsoft.Json; + +namespace TrackCenter.Api; + +public class LongJsonConverter : JsonConverter +{ + public override bool CanConvert(Type objectType) + { + return objectType == typeof (long) || objectType == typeof (long?); + } + + public override object? ReadJson( + JsonReader reader, + Type objectType, + object? existingValue, + JsonSerializer serializer) + { + long result; + return reader.Value == null || string.IsNullOrEmpty(reader.Value.ToString()) ? (object) null : (long.TryParse(reader.Value.ToString(), out result) ? (object) result : (object) new DateTime()); + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + writer.WriteValue(((long) value).ToString()); + } +} diff --git a/src/TrackCenter.Api/TrackCenterApiModule.cs b/src/TrackCenter.Api/TrackCenterApiModule.cs index 00dd02ad..596b0369 100644 --- a/src/TrackCenter.Api/TrackCenterApiModule.cs +++ b/src/TrackCenter.Api/TrackCenterApiModule.cs @@ -8,6 +8,7 @@ using Fake.Security.Claims; using FluentValidation.AspNetCore; using Hangfire; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Authorization; using Microsoft.OpenApi.Models; using OpenTelemetry.Resources; @@ -59,6 +60,16 @@ public class TrackCenterApiModule : FakeModule options.Filters.Add(); }).AddNewtonsoftJson(); + //Json格式化全局处理 + context.Services.Configure(options => + { + options.SerializerSettings.ContractResolver = + new Newtonsoft.Json.Serialization. + CamelCasePropertyNamesContractResolver(); // 首字母小写(驼峰样式) + options.SerializerSettings.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss")); + options.SerializerSettings.Converters.Add(new LongJsonConverter()); + }); + services.AddFakeSwaggerGen(options => { options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()