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


Метод BinaryFormatter.Deserialize повторно изолирует некоторые исключения в классе SerializationException

Метод BinaryFormatter.Deserialize теперь заключает некоторые объекты исключений в SerializationException перед передачей исключения обратно вызывающему объекту.

Описание изменения

Ранее метод BinaryFormatter.Deserialize позволял использовать некоторые произвольные исключения, например ArgumentNullException, для передачи стека соответствующим вызывающим объектам.

В .NET 5 и более поздних версиях метод BinaryFormatter.Deserialize более агрессивно перехватывает исключения, вызываемые из-за недопустимых операций десериализации, и заключает их в SerializationException.

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

5,0

В большинстве случаев никаких дополнительных действий от вас не требуется. Но если место вызова зависит от конкретного исключения, вы можете исключить его из SerializationException, как показано в следующем примере.

Stream inputStream = GetInputStream();
var formatter = new BinaryFormatter();

try
{
    object deserialized = formatter.Deserialize(inputStream);
}
catch (MyException myEx)
{
    // Handle 'myEx' here in case it was thrown directly.
}
catch (SerializationException serEx) when (serEx.InnerException is MyException myEx)
{
    // Handle 'myEx' here in case it was wrapped in SerializationException.
}

Затронутые API