Partager via


BinaryFormatter.Deserialize réemballe certaines exceptions sous forme de SerializationException

La méthode BinaryFormatter.Deserialize encapsule désormais certains objets d’exception à l’intérieur d’un SerializationException avant de propager l’exception à l'appelant.

Description de la modification

Auparavant, la méthode BinaryFormatter.Deserialize autorisait certaines exceptions aléatoires, telles que ArgumentNullException, à se propager dans la pile jusqu'à ses appelants.

Dans .NET 5 et versions ultérieures, la BinaryFormatter.Deserialize méthode intercepte plus agressivement les exceptions qui se produisent en raison d’opérations de désérialisation non valides et les encapsule dans un SerializationException.

Version introduite

5,0

Dans la plupart des cas, vous n’avez pas besoin d’effectuer d’action. Toutefois, si votre site d’appel dépend d’une exception particulière levée, vous pouvez désenvelopper l’exception de SerializationException externe, comme illustré dans l’exemple suivant.

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 affectées