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()