Condividi tramite


BinaryFormatter.Deserialize riscriva alcune eccezioni in SerializationException

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

Descrizione delle modifiche

In precedenza, il metodo BinaryFormatter.Deserialize consentiva la propagazione di alcune eccezioni arbitrarie, come ArgumentNullException, lungo lo stack fino 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 le incapsula in un oggetto 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, è possibile annullare il wrapping dell'eccezione dall'esterno SerializationException, 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.
}

Le API interessate