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

 

因為自己做邊界測試發現的這個問題,所以也沒有全面測試過是否存在其他問題,如果有發現請留言,感謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM