Runtime: System.Text.Json default DateTimeZoneHandling

Criado em 1 out. 2019  ·  3Comentários  ·  Fonte: dotnet/runtime

Em JSON.NET, você pode:

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

Existe algo semelhante em System.Text.Json ?
Se não houver uma opção para definir o padrão, ele pode ser passado manualmente?

Além disso, qual é o padrão ( Local , Utc , Unspecified )?

area-System.Text.Json

Comentários muito úteis

@btecu infelizmente, a única maneira, eu acho, de ter a opção semelhante em System.Text.Json é fazer:

services.AddControllers()
    .AddJsonOptions(options =>
     {
         options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
     });

e implementar DateTimeConverter assim

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

Todos 3 comentários

cc @layomia em datas

Uma vez que um DateTime pode ser definido em cada um desses formatos (por exemplo, com e sem o fuso horário \ deslocamento), o leitor \ gravador (e, portanto, o serializador) usa o que está disponível e usa \ assume um formato ISO 8601 para representar isso.

@btecu o perfil ISO 8601 é usado por padrão no serializador, por exemplo, 2019-07-26T16: 59: 57-05: 00.

Para desserializar, se o deslocamento de data e hora for fornecido como "hh: mm", será criado um DateTime com DateTimeKind.Local . "Z" dará DateTimeKind.Utc . Se nenhum deslocamento for fornecido, um DateTime com DateTimeKind.Unspecified será criado.
O mapeamento reverso se aplica à serialização: escrever um DateTime com DateTimeKind.Local resultará em uma representação ISO com um deslocamento formatado "hh: mm" e assim por diante.

Para obter mais informações sobre o suporte DateTime e DateTimeOffset em System.Text.Json, e como você pode implementar análise ou formatação personalizada, consulte https://docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-json -Apoio, suporte.

@btecu infelizmente, a única maneira, eu acho, de ter a opção semelhante em System.Text.Json é fazer:

services.AddControllers()
    .AddJsonOptions(options =>
     {
         options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
     });

e implementar DateTimeConverter assim

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"));
    }
}
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Timovzl picture Timovzl  ·  3Comentários

yahorsi picture yahorsi  ·  3Comentários

chunseoklee picture chunseoklee  ·  3Comentários

GitAntoinee picture GitAntoinee  ·  3Comentários

matty-hall picture matty-hall  ·  3Comentários