BinaryFormatter.Deserialize encapsula novamente algumas exceções em SerializationException

O método BinaryFormatter.Deserialize agora encapsula novamente alguns objetos de exceção dentro de um SerializationException antes de propagar a exceção de volta para o chamador.

Descrição das alterações

Antes, o método BinaryFormatter.Deserialize permitia que algumas exceções arbitrárias, como ArgumentNullException, propagassem a pilha para seus chamadores.

No .NET 5 e posteriores, o método BinaryFormatter.Deserialize captura de modo mais agressivo as exceções que ocorrem devido a operações de desserialização inválidas e as encapsula em uma SerializationException.

Versão introduzida

5,0

Na maioria dos casos, você não precisa tomar nenhuma ação. No entanto, se o site da chamada depender da geração de uma exceção específica, você poderá desencapsular a exceção da SerializationException exterior, conforme é mostrado no exemplo a seguir.

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.
}

APIs afetadas