Partager via


BinaryFormatter.Deserialize réinclut dans un wrapper certaines exceptions dans SerializationException

La méthode BinaryFormatter.Deserialize réinclut maintenant dans un wrapper certains objets d’exception à l’intérieur d’un SerializationException avant de repropager l’exception à l’appelant.

Description de la modification

Auparavant, la méthode BinaryFormatter.Deserialize permettait certaines exceptions arbitraires, telles que ArgumentNullException, de propager la pile vers ses appelants.

Dans .NET 5 et versions ultérieures, la méthode BinaryFormatter.Deserialize intercepte de manière plus agressive les exceptions qui se produisent en raison d’opérations de désérialisation non valides et les enveloppe dans une SerializationException.

Version introduite

5,0

Dans la plupart des cas, vous n’avez pas besoin d’agir. 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