BinaryFormatter.Deserialize esegue il rewrapping di alcune eccezioni in SerializationException

Il metodo BinaryFormatter.Deserialize esegue ora il rewrapping di alcuni oggetti eccezione all'interno di SerializationException prima di propagare nuovamente l'eccezione al chiamante.

Descrizione delle modifiche

In precedenza, il metodo BinaryFormatter.Deserialize consentiva ad alcune eccezioni arbitrarie, ad esempio ArgumentNullException, di propagare lo stack ai chiamanti.

In .NET 5 e versioni successive, il metodo BinaryFormatter.Deserialize rileva in modo più aggressivo le eccezioni che si verificano a causa di operazioni di deserializzazione non valide e ne esegue il wrapping in SerializationException.

Versione introdotta

5.0

Nella maggior parte dei casi, non è necessario eseguire alcuna azione. Tuttavia, se il sito di chiamata dipende da una particolare eccezione generata, puoi annullare il wrapping dell'eccezione dal SerializationException esterno, come illustrato nell'esempio seguente.

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 interessate