Di JSON.NET Anda dapat:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
Apakah ada yang serupa di System.Text.Json
?
Jika tidak ada opsi untuk mengatur default, dapatkah diteruskan secara manual?
Juga, apa defaultnya ( Local
, Utc
, Unspecified
)?
cc @layomia berkencan
Karena DateTime dapat diatur dalam setiap format tersebut (misalnya dengan dan tanpa zona waktu\offset), pembaca\penulis (dan dengan demikian pembuat serial) menggunakan apa yang tersedia dan menggunakan\asumsi format ISO 8601 untuk mewakilinya.
@btecu profil ISO 8601 digunakan secara default di serializer, misalnya 26-07-2019T16:59:57-05:00.
Untuk deserializing, jika offset datetime diberikan sebagai "hh:mm", DateTime dengan DateTimeKind.Local
dibuat. "Z" akan memberikan DateTimeKind.Utc
. Jika tidak ada offset yang diberikan, maka DateTime dengan DateTimeKind.Unspecified
dibuat.
Pemetaan terbalik berlaku untuk serialisasi: menulis DateTime
dengan DateTimeKind.Local
akan menghasilkan representasi ISO dengan offset berformat "hh:mm", dan seterusnya.
Untuk mengetahui lebih lanjut tentang dukungan DateTime dan DateTimeOffset di System.Text.Json, dan bagaimana Anda dapat menerapkan penguraian atau pemformatan khusus, lihat https://docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-json -mendukung.
@btecu sayangnya satu-satunya cara, saya pikir, untuk memiliki opsi serupa di System.Text.Json
adalah dengan melakukan:
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});
dan implementasikan DateTimeConverter seperti itu
public class DateTimeConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateTime.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"));
}
}
Komentar yang paling membantu
@btecu sayangnya satu-satunya cara, saya pikir, untuk memiliki opsi serupa di
System.Text.Json
adalah dengan melakukan:dan implementasikan DateTimeConverter seperti itu