diff --git a/Yi.Abp.Net8/framework/Yi.Framework.Core/Json/DatetimeJsonConverter.cs b/Yi.Abp.Net8/framework/Yi.Framework.Core/Json/DatetimeJsonConverter.cs new file mode 100644 index 00000000..e4732065 --- /dev/null +++ b/Yi.Abp.Net8/framework/Yi.Framework.Core/Json/DatetimeJsonConverter.cs @@ -0,0 +1,27 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Yi.Framework.Core.Json; + +public class DatetimeJsonConverter : JsonConverter +{ + private string _format; + public DatetimeJsonConverter(string format="yyyy-MM-dd HH:mm:ss") + { + _format = format; + } + + public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if(reader.TokenType==JsonTokenType.String) + { + if (DateTime.TryParse(reader.GetString(), out DateTime dateTime)) return dateTime; + } + return reader.GetDateTime(); + } + + public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString(_format)); + } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/framework/Yi.Framework.Core/Json/EnumStringJsonConverter.cs b/Yi.Abp.Net8/framework/Yi.Framework.Core/Json/EnumStringJsonConverter.cs new file mode 100644 index 00000000..9e42a57b --- /dev/null +++ b/Yi.Abp.Net8/framework/Yi.Framework.Core/Json/EnumStringJsonConverter.cs @@ -0,0 +1,18 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Yi.Framework.Core.Json; + +public class EnumStringJsonConverter : JsonConverter +{ + public override Enum? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var enumString = reader.GetString(); + return (Enum)Enum.Parse(typeToConvert, enumString); + } + + public override void Write(Utf8JsonWriter writer, Enum value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString()); + } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs b/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs index 2b1a2ebf..5cafc749 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs @@ -33,6 +33,7 @@ using Yi.Framework.Bbs.Application; using Yi.Framework.Bbs.Application.Extensions; using Yi.Framework.ChatHub.Application; using Yi.Framework.CodeGen.Application; +using Yi.Framework.Core.Json; using Yi.Framework.Rbac.Application; using Yi.Framework.Rbac.Domain.Authorization; using Yi.Framework.Rbac.Domain.Shared.Consts; @@ -99,12 +100,20 @@ namespace Yi.Abp.Web options.ConventionalControllers.ConventionalControllerSettings.ForEach(x => x.RootPath = "api/app"); }); - //设置api格式 - service.AddControllers().AddNewtonsoftJson(options => - { - options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; - options.SerializerSettings.Converters.Add(new StringEnumConverter()); - }); + //【NewtonsoftJson严重问题!!!!!逆天】设置api格式,留给后人铭记 + // service.AddControllers().AddNewtonsoftJson(options => + // { + // options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; + // options.SerializerSettings.Converters.Add(new StringEnumConverter()); + // }); + + //请使用微软的 + service.AddControllers().AddJsonOptions(options => + { + options.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter()); + options.JsonSerializerOptions.Converters.Add(new EnumStringJsonConverter()); + } + ); //设置缓存不要过期,默认滑动20分钟 Configure(cacheOptions =>