Сохраняется ли в современном .Net необходимость делать исключения сериализуемые?

Рейтинг: 5Ответов: 1Опубликовано: 18.03.2023

В .Net Framework были требования делать исключения сериализуемыми с помощью связки из атрибута [Serializable], специального конструктора и метода GetObjectData. И всё для того, чтобы покрыть какой-то кейс, когда исключение будет передаваться в другой AppDomain. К сожалению, я так до конца и не понял, когда это может происходить, и наверное поэтому у меня все ещё вызывает вопрос, нужно ли делать всё это, когда я создаю исключение, которое заведомо будет бросаться только в .Net5+

Ответы

▲ 6

В 2020-м разработчики .Net опубликовали план постепенной отмены BinaryFormatter. В частности, они планировали заморозить [Serializable] в .Net 6, т.е. перестать создавать новые классы с этой аннотацией. ЗА ОДНИМ ИСКЛЮЧЕНИЕМ

The exclusion is for dotnet org first-party projects which target netstandard2.0 or earlier. For these projects, Exception-derived types should continue to be annotated as [Serializable] so that they may be remoted across app domain boundaries.

То есть, насколько я понимаю, предполагается использовать [Serializable] только для совместимости со старыми окружениями. Если же у вас всё окружение на .Net 6 и выше, то [Serializable] не требуется.