Runtime: System.Text.Json الافتراضي DateTimeZoneHandling

تم إنشاؤها على ١ أكتوبر ٢٠١٩  ·  3تعليقات  ·  مصدر: dotnet/runtime

في JSON.NET يمكنك:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};

هل يوجد شيء مشابه في System.Text.Json ؟
إذا لم يكن هناك خيار لتعيين الافتراضي ، فهل يمكن تمريره يدويًا؟

أيضًا ، ما هو الإعداد الافتراضي ( Local ، Utc ، Unspecified

area-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"));
    }
}

ال 3 كومينتر

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"));
    }
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Timovzl picture Timovzl  ·  3تعليقات

ilmax picture ilmax  ·  3تعليقات

v0l picture v0l  ·  3تعليقات

noahfalk picture noahfalk  ·  3تعليقات

matty-hall picture matty-hall  ·  3تعليقات