Net core 2.x 升级 3.0 使用自带 System.Text.Json 时区 踩坑经历
.Net Core 3.0 更新的东西很多,这里就不多做解释了,官方和博园大佬写得很详细
关于 Net Core 时区问题,在 2.1 版本的时候,因为用的是 Newtonsoft.Json,配置比较方便
AddJsonOptions(opt => { opt.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local; })
但是用 System.Text.Json 就没那么方便了,翻了半天,只找到个 JsonConverts ,自己写了一个转换器去做转时区
using System.Text.Json.Serialization; using System.Text.Json; namespace LuciusLiang.Pwanshop.Api { public class JsonDateTimeConvert : JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var paramString = reader.GetString(); var localDateTime = Convert.ToDateTime(paramString); return localDateTime; } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); } } }
然后在 StartUp 中添加进 JsonOptions
services.AddControllers(opt => { opt.InputFormatters.Add(new TextPlainInputFormatter()); }).AddJsonOptions(opt => { opt.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); opt.JsonSerializerOptions.Converters.Add(new JsonDateTimeConvert()); }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
因为自己做边界测试发现的这个问题,所以也没有全面测试过是否存在其他问题,如果有发现请留言,感谢。