다음을 통해 공유


선행 또는 후행 공백이 있는 버전 형식을 역직렬화하기

JsonSerializer는 선행 또는 후행 공백이 있는 Version 형식을 역직렬화하는 동안 예외를 발생시킵니다.

이전 동작

.NET 7 이전에는 선행 또는 후행 공백이 있는 역직렬화 Version 형식이 허용되었습니다.

새 동작

.NET 7 JsonSerializer 에서 시작하여 선행 또는 후행 공백이 있는 FormatException 형식을 역직렬화 Version 할 때 throw합니다.

도입된 버전

.NET 7

파괴적 변경 유형

이 변경 내용은 이진 호환성에 영향을 줄 수 있습니다.

변경 이유

.NET은 기본 변환기의 구현을 최적화했습니다 Version . 이로 인해 System.Text.Json에서 지원하는 다른 기본 형식, 예를 들어 DateTimeGuid의 동작과 일치하도록 구현되었으며, 이 형식들은 선행 및 후행 공백도 허용하지 않습니다.

이전 동작을 다시 얻으려면 공백을 허용하는 형식에 Version 대한 사용자 지정 변환기를 추가합니다.

internal sealed class VersionConverter : JsonConverter<Version>
{
    public override Version Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        string? versionString = reader.GetString();
        if (Version.TryParse(versionString, out Version? result))
        {
            return result;
        }

        ThrowHelper.ThrowJsonException();
        return null;
    }

    public override void Write(Utf8JsonWriter writer, Version value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString());
    }
}

영향을 받는 API