1.配置内容
- MVC的配置项目与动态API的需要分别配置
- 删除ABP设置中的Modifiers关于DateTimeConverter的设置
// 移除默认的JSON序列化器
Configure<AbpSystemTextJsonSerializerModifiersOptions>(options => {
options.Modifiers.RemoveAll(c => c.Target is AbpDateTimeConverterModifier);
});
// 配置动态API使用的JSON选项
Configure<AbpSystemTextJsonSerializerOptions>(options =>
{
ConfigureJsonOptions(options.JsonSerializerOptions);
});
// 配置MVC JSON选项
context.Services.Configure<JsonOptions>(options =>
{
ConfigureJsonOptions(options.JsonSerializerOptions);
});
private void ConfigureJsonOptions(JsonSerializerOptions options)
{
// 清除可能存在的默认日期转换器
options.Converters.RemoveAll(c => c is JsonConverter<DateTime>);
options.Converters.RemoveAll(c => c is JsonConverter<DateTime?>);
options.Converters.RemoveAll(c => c is JsonConverter<DateTimeOffset>);
options.Converters.RemoveAll(c => c is JsonConverter<DateTimeOffset?>);
// 添加自定义日期转换器
options.Converters.Add(new DateTimeConverter("yyyy-MM-dd HH:mm:ss"));
options.Converters.Add(new DateTimeNullableConverter("yyyy-MM-dd HH:mm:ss"));
options.Converters.Add(new DateTimeOffsetConverter("yyyy-MM-dd HH:mm:ss zzz"));
options.Converters.Add(new DateTimeOffsetNullableConverter("yyyy-MM-dd HH:mm:ss zzz"));
// 基本JSON配置
options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
options.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.ReferenceHandler = ReferenceHandler.IgnoreCycles;
options.DefaultIgnoreCondition = JsonIgnoreCondition.Never;
options.PropertyNameCaseInsensitive = true;
// 枚举处理
options.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase));
}