Formato de serialización predeterminado para TimeSpan
System.Text.Json se ha agregado compatibilidad con TimeSpan en .NET 6 GA; sin embargo, este cambio no incluye compatibilidad con los generadores de origen. En la versión de mantenimiento 6.0.2 de .NET 6, System.Text.Json incluye compatibilidad con la serialización de generadores de origen de los valores TimeSpan. Esta compatibilidad cambia el formato de serialización predeterminado para los valores TimeSpan de los generadores de origen.
Comportamiento anterior
En .NET 6 GA, los generadores de origen serializan los valores TimeSpan mediante la salida de todas las propiedades públicas del tipo, que es el comportamiento de serialización predeterminado de los 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}
Comportamiento nuevo
En la versión de mantenimiento 6.0.2 de .NET, los generadores de origen serializan los valores TimeSpan en el siguiente formato, que es coherente con el formato de serializador basado en reflexión:
"2.00:00:01"
Versión introducida
.NET 6.0.2 (versión de mantenimiento)
Tipo de cambio importante
Este cambio puede afectar a la compatibilidad binaria.
Motivo del cambio
La generación del origen System.Text.Json es una nueva característica y su comportamiento de serialización debe ser lo más coherente posible con el serializador basado en reflexión. Este cambio simplifica la migración a los generadores de origen.
Acción recomendada
Es poco probable que los usuarios dependan del formato de serialización TimeSpan actual, ya que genera redundantemente todas las propiedades públicas del tipo (que es el comportamiento de serialización predeterminado para los objetos) y no realiza un recorrido de ida y vuelta.
Si depende del comportamiento existente, el curso de acción recomendado es crear un convertidor personalizado que genera las propiedades necesarias desde 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();
}
}
API afectadas
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de