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
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET