TimeSpan에 대한 기본 serialization 형식
System.Text.Json은 .NET 6 GA에서 TimeSpan에 대한 지원을 추가했지만 이 변경 내용에는 원본 생성기에 대한 지원이 포함되지 않았습니다. .NET 6 서비스 릴리스 6.0.2에서 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();
}
}
영향을 받는 API
참고 항목
.NET