BinaryFormatter.Deserialize 重新包裝 SerializationException 中的一些例外狀況

BinaryFormatter.Deserialize 方法現在會在 SerializationException 中重新包裝一些例外狀況物件,再將例外狀況傳播回呼叫端。

變更描述

先前,BinaryFormatter.Deserialize 方法允許某些任意例外狀況,例如 ArgumentNullException,將堆疊傳播至其呼叫端。

在 .NET 5 和更新版本中,BinaryFormatter.Deserialize 方法會更積極攔截因無效還原序列化作業而發生的例外狀況,並將其包裝在 SerializationException 中。

導入的版本

5.0

多數情況中,您將不需要採取任何動作。 不過,如果您的呼叫網站相依於擲回的特定例外狀況,您可以從外部 SerializationException 解除包裝例外狀況,如下列範例所示。

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