في JSON.NET يمكنك:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
هل يوجد شيء مشابه في System.Text.Json
؟
إذا لم يكن هناك خيار لتعيين الافتراضي ، فهل يمكن تمريره يدويًا؟
أيضًا ، ما هو الإعداد الافتراضي ( Local
، Utc
، Unspecified
)؟
cclayomia في التواريخ
نظرًا لأنه يمكن تعيين DateTime في كل من هذه التنسيقات (على سبيل المثال مع وبدون المنطقة الزمنية \ الإزاحة) ، يستخدم القارئ / الكاتب (وبالتالي المُسلسل) ما هو متاح ويستخدم \ يفترض تنسيق ISO 8601 لتمثيل ذلك.
btecu ، يتم استخدام ملف تعريف ISO 8601 افتراضيًا في المسلسل ، على سبيل المثال 2019-07-26T16: 59: 57-05: 00.
لإلغاء التسلسل ، إذا تم إعطاء إزاحة التاريخ والوقت كـ "hh: mm" ، يتم إنشاء DateTime بـ DateTimeKind.Local
. "Z" ستعطي DateTimeKind.Utc
. إذا لم يتم إعطاء تعويض ، فسيتم إنشاء DateTime بـ DateTimeKind.Unspecified
.
ينطبق التعيين العكسي على التسلسل: كتابة DateTime
بـ DateTimeKind.Local
سينتج عنه تمثيل ISO مع إزاحة منسقة بـ "hh: mm" ، وهكذا.
لمزيد من المعلومات حول دعم DateTime و DateTimeOffset في System.Text.Json ، وكيف يمكنك تنفيذ التحليل أو التنسيق المخصص ، راجع https://docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-json -الدعم.
btecu للأسف ، الطريقة الوحيدة ، على ما أعتقد ، للحصول على خيار مماثل في System.Text.Json
هو القيام بما يلي:
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});
وتنفيذ DateTimeConverter من هذا القبيل
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"));
}
}
التعليق الأكثر فائدة
btecu للأسف ، الطريقة الوحيدة ، على ما أعتقد ، للحصول على خيار مماثل في
System.Text.Json
هو القيام بما يلي:وتنفيذ DateTimeConverter من هذا القبيل