Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
System.Text.Json adicionou suporte para TimeSpan no .NET 6 GA; no entanto, essa alteração não incluiu suporte para geradores de código-fonte. Na versão 6.0.2 de manutenção do .NET 6, System.Text.Json inclui suporte para serialização de gerador de origem de valores TimeSpan. Esse suporte altera o formato de serialização padrão dos valores TimeSpan em geradores de código fonte.
Comportamento anterior
No .NET 6 GA, os geradores de origem serializam TimeSpan valores gerando todas as propriedades públicas do tipo, que é o comportamento de serialização padrão para objetos:
{"days":2,"hours":0,"milliseconds":0,"minutes":0,"seconds":1,"ticks":1728010000000,"totalDays":2.0000115740740743,"totalHours":48.000277777777775,"totalMilliseconds":172801000,"totalMinutes":2880.016666666667,"totalSeconds":172801}
Novo comportamento
Na versão de manutenção do .NET 6.0.2, os geradores de origem serializam valores TimeSpan no seguinte formato, que é consistente com o formato de serializador baseado em reflexão:
"2.00:00:01"
Versão introduzida
.NET 6.0.2 (versão de manutenção)
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade binária.
Motivo da alteração
A geração de código fonte do System.Text.Json é uma nova funcionalidade, e seu comportamento de serialização deve ser o mais consistente possível com o serializador baseado em reflexão. Essa alteração simplifica a migração para geradores de origem.
Ação recomendada
É improvável que os usuários dependam do formato de serialização atual TimeSpan, pois ele gera de forma redundante todas as propriedades públicas do tipo (que é o comportamento de serialização padrão para objetos) e não faz viagem de ida e volta.
Se você depender do comportamento existente, o curso de ação recomendado será criar um conversor personalizado que produz as propriedades necessárias de TimeSpan:
public class TimeSpanConverter : JsonConverter<TimeSpan>
{
public void WriteValue(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteNumber("days", value.Days);
writer.WriteNumber("hours", value.Hours);
/* insert any needed properties here */
writer.WriteEndObject();
}
}