Runtime: System.Text.Json по умолчанию DateTimeZoneHandling

Созданный на 1 окт. 2019  ·  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 Комментарий

cc @layomia на

Поскольку DateTime может быть установлен в каждом из этих форматов (например, с часовым поясом \ смещением и без него), средство чтения \ записи (и, следовательно, сериализатор) использует то, что доступно, и использует \ предполагает формат ISO 8601 для представления этого.

@btecu профиль ISO 8601 используется по умолчанию в сериализаторе, например, 2019-07-26T16: 59: 57-05: 00.

Для десериализации, если смещение даты и времени задано как «чч: мм», создается DateTime с DateTimeKind.Local . «Z» даст DateTimeKind.Utc . Если смещение не задано, создается DateTime с DateTimeKind.Unspecified .
Обратное отображение применяется к сериализации: запись DateTime с DateTimeKind.Local даст представление ISO со смещением в формате «чч: мм» и т. Д.

Дополнительные сведения о поддержке 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Комментарии

noahfalk picture noahfalk  ·  3Комментарии

jchannon picture jchannon  ·  3Комментарии

chunseoklee picture chunseoklee  ·  3Комментарии

omajid picture omajid  ·  3Комментарии