diff --git a/src/InterfaceForward.Api/DateTimeJsonConverter.cs b/src/InterfaceForward.Api/DateTimeJsonConverter.cs new file mode 100644 index 0000000..b2d273e --- /dev/null +++ b/src/InterfaceForward.Api/DateTimeJsonConverter.cs @@ -0,0 +1,32 @@ +using Newtonsoft.Json; + +namespace InterfaceForward.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/InterfaceForward.Api/InterfaceForwardApiModule.cs b/src/InterfaceForward.Api/InterfaceForwardApiModule.cs index 0a50729..8deaacd 100644 --- a/src/InterfaceForward.Api/InterfaceForwardApiModule.cs +++ b/src/InterfaceForward.Api/InterfaceForwardApiModule.cs @@ -7,6 +7,7 @@ using Fake.Modularity; using InterfaceForward.Application; using InterfaceForward.Application.Filters; using InterfaceForward.Domain.Shared.Helpers; +using Microsoft.AspNetCore.Mvc; namespace InterfaceForward.Api; @@ -30,6 +31,16 @@ public class InterfaceForwardApiModule : FakeModule services.AddMvc().AddNewtonsoftJson(); + //Json格式化全局处理 + context.Services.Configure(options => + { + options.SerializerSettings.ContractResolver = + new Newtonsoft.Json.Serialization. + CamelCasePropertyNamesContractResolver(); //.DefaultContractResolver(); + options.SerializerSettings.Converters.Add(new DateTimeJsonConverter("yyyy-MM-dd HH:mm:ss")); + options.SerializerSettings.Converters.Add(new LongJsonConverter()); + }); + services.AddFakeSwaggerGen() .AddFakeExceptionFilter() .AddFakeValidationActionFilter() diff --git a/src/InterfaceForward.Api/LongJsonConverter.cs b/src/InterfaceForward.Api/LongJsonConverter.cs new file mode 100644 index 0000000..72ad706 --- /dev/null +++ b/src/InterfaceForward.Api/LongJsonConverter.cs @@ -0,0 +1,26 @@ +using Newtonsoft.Json; + +namespace InterfaceForward.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()); + } +}