次の方法で共有


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