Deserializowanie typu wersji z wiodącym lub końcowym białym znakiem
JsonSerializer teraz zgłasza wyjątek podczas deserializacji Version typów, które mają wiodące lub końcowe białe znaki.
Poprzednie zachowanie
Przed platformą .NET 7 dozwolone było deserializowanie Version typów z wiodącymi lub końcowymi odstępami.
Nowe zachowanie
Rozpoczęto na platformie .NET 7, JsonSerializer zgłaszany FormatException jest błąd podczas deserializacji Version typów, które mają wiodące lub końcowe białe znaki.
Wprowadzona wersja
.NET 7
Typ zmiany powodującej niezgodność
Ta zmiana może mieć wpływ na zgodność binarną.
Przyczyna wprowadzenia zmiany
Platforma .NET zoptymalizowała implementację konwertera bazowego Version . Spowodowało to dostosowanie implementacji do zachowania innych typów pierwotnych obsługiwanych przez System.Text.Json, na przykład DateTime i Guid, które również nie zezwalają na wiodące i końcowe spacje.
Zalecana akcja
Aby przywrócić stare zachowanie, dodaj niestandardowy konwerter dla Version typu, który zezwala na białe znaki:
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());
}
}