Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
System.Text.Json Добавлена поддержка в .NET 6 GA, однако это изменение не включало поддержку TimeSpan исходных генераторов. В выпускаемой версии 6.0.2 для .NET 6 System.Text.Json включена поддержка сериализации с помощью генератора исходного кода для значений TimeSpan. Это поддерживает изменение формата сериализации по умолчанию для TimeSpan значений в исходных генераторах.
Предыдущее поведение
В версии .NET 6 GA, генераторы источников сериализуют TimeSpan значения, выводя все общедоступные свойства типа, что является поведением сериализации по умолчанию для объектов.
{"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}
Новое поведение
В выпуске .NET 6.0.2 генераторы источников сериализуют TimeSpan значения в следующем формате, который соответствует формату сериализатора на основе отражения:
"2.00:00:01"
Представленная версия
.NET 6.0.2 (сервисный релиз)
Тип разрушающего изменения
Это изменение может повлиять на совместимость двоичных файлов.
Причина изменения
Создание источника System.Text.Json — это новая функция, и его поведение сериализации должно быть максимально согласовано с сериализатором на основе отражения. Это изменение упрощает миграцию на исходные генераторы.
Рекомендуемое действие
Маловероятно, что пользователи зависят от текущего TimeSpan формата сериализации, так как он избыточно выводит все общедоступные свойства типа (что является стандартным способом сериализации объектов), и он не поддерживает возврат к исходному состоянию.
Если вы зависите от существующего поведения, рекомендуется создать настраиваемый преобразователь , который выводит необходимые свойства из 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();
}
}