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
Ação recomendada
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.
}