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