Поделиться через


JsonNumberHandlingAttribute для свойств коллекции

В .NET 6 внесено небольшое критическое изменение для атрибута JsonNumberHandlingAttribute. Если вы примените этот атрибут к свойству, которое является коллекцией нечисловых значений, и попытаетесь сериализовать или десериализовать это свойство, создается исключение InvalidOperationException. Этот атрибут допустим только для свойств, которые являются коллекциями числовых типов, например:

[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
public List<int> MyList { get; set; }

Прежнее поведение

Несмотря на то, что JsonNumberHandlingAttribute игнорировался во время сериализации, его можно было применить к свойствам, которые являются коллекциями нечисловых типов. Например:

[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)]
public List<MyClass> MyList { get; set; }

Новое поведение

Начиная с .NET 6, если вы примените JsonNumberHandlingAttribute к свойству, которое является коллекцией нечисловых значений, и попытаетесь сериализовать или десериализовать это свойство, будет создано исключение InvalidOperationException.

Представленные версии

.NET 6

Тип критического изменения

Это изменение может повлиять на совместимость двоичного кода.

Причина изменения

Это изменение стало побочным результатом оптимизации производительности для функции обработки чисел.

Удалите атрибут JsonNumberHandlingAttribute из свойств коллекции, которые с ним несовместимы.

Затронутые API

Все методы сериализации и десериализации System.Text.Json.JsonSerializer.