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
)?
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"));
}
}
Comentários muito úteis
@btecu infelizmente, a única maneira, eu acho, de ter a opção semelhante em
System.Text.Json
é fazer:e implementar DateTimeConverter assim