Compartilhar via


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

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

Descrição da alteração

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 posterior, o método BinaryFormatter.Deserialize captura exceções de operações de desserialização inválidas de forma mais agressiva e as encapsula em um 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