我們使用 Newtonsoft 的 WriteStartConstructor 構造了日期物件。但是我們不能用 System.Text.Json 做同樣的事情。
using System; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.Text.Json; var myObj = new { DOB = DateTime.Now.AddYears(-20) }; Console.WriteLine("Newtonsoft (WriteStartConstructor) ->\t\t" JsonConvert.SerializeObject(myObj, new NewtonsoftDateTimeConverter())); var options = new JsonSerializerOptions(); options.Converters.Add(new SystemTextJsonDateTimeConverter()); Console.WriteLine("System.Text.Json (WriteStartObject) ->\t\t" System.Text.Json.JsonSerializer.Serialize(myObj, options)); Console.ReadKey(); public class NewtonsoftDateTimeConverter : DateTimeConverterBase { public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, Newtonsoft.Json.JsonSerializer serializer) { throw new NotImplementedException(); } public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) { DateTime val = (DateTime)value; writer.WriteStartConstructor("Date"); writer.WriteValue(val.Year); writer.WriteValue(val.Month - 1); writer.WriteValue(val.Day); writer.WriteValue(val.Hour); writer.WriteValue(val.Minute); writer.WriteValue(val.Second); writer.WriteValue(0); writer.WriteEndConstructor(); } } public class SystemTextJsonDateTimeConverter : System.Text.Json.Serialization.JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { throw new NotImplementedException(); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStartObject("Date"); writer.WriteNumberValue(value.Year); writer.WriteNumberValue(value.Month - 1); writer.WriteNumberValue(value.Day); writer.WriteNumberValue(value.Hour); writer.WriteNumberValue(value.Minute); writer.WriteNumberValue(value.Second); writer.WriteNumberValue(0); writer.WriteEndObject(); } }uj5u.com熱心網友回復:
你會使用
WriteRawValue與skipInputValidation引數集true。例如:public class SystemTextJsonDateTimeConverter : System.Text.Json.Serialization.JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { throw new NotImplementedException(); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteRawValue($"new Date({value.Year},{value.Month - 1},{value.Day},{value.Hour},{value.Minute},{value.Second},0)", skipInputValidation: true); } }我用過它,你的提琴手的輸出是:
Newtonsoft -> {"DOB":new Date(2001,10,27,5,57,10,0)} System.Text.Json -> {"DOB":new Date(2001,10,27,5,57,10,0)}轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367630.html
標籤:C# json.net 系统文本文件 .net-6.0
上一篇:從另一個命名空間匯入插件
下一篇:異步/等待:誰在等待/阻塞?

