Сериализация IAsyncEnumerable в System.Text.Json
System.Text.Json теперь поддерживает сериализацию и десериализацию экземпляров IAsyncEnumerable<T>.
Прежнее поведение
В предыдущих версиях в результате сериализации IAsyncEnumerable<T> в System.Text.Json создавались пустые объекты JSON ({}
). Десериализация завершалась сбоем с исключением JsonException.
Новое поведение
Асинхронные методы сериализации теперь перечисляют все экземпляры IAsyncEnumerable<T> в графе объектов, а затем сериализуют их как массивы JSON. Синхронные методы сериализации не поддерживают сериализацию IAsyncEnumerable<T> и вызывают исключение NotSupportedException.
Представленные версии
.NET 6
Тип критического изменения
Это изменение может повлиять на совместимость исходного кода. Если вы смените целевую платформу на .NET 6, ошибки времени компиляции не будут возникать, но могут появиться отличия в поведении сериализации во время выполнения.
Причина изменения
Это изменение было внесено для включения поддержки потоковых ответов IAsyncEnumerable<T> в ASP.NET Core MVC.
Рекомендуемое действие
Проверьте, есть ли в ваших моделях сериализации типы, реализующие IAsyncEnumerable<T>, и определите, нужно ли создавать перечисление в выходных данных JSON. Отключить сериализацию IAsyncEnumerable<T> можно одним из следующих способов:
- Добавьте JsonIgnoreAttribute к свойству, содержащему IAsyncEnumerable<T>.
- Определите фабрику настраиваемого преобразователя, выполняющую сериализацию экземпляров IAsyncEnumerable<T> в виде пустых объектов JSON.