BinaryFormatter.Deserialize ponownie opakowuje niektóre wyjątki w serializacjiException

Metoda BinaryFormatter.Deserialize teraz ponownie opakowuje niektóre obiekty wyjątków wewnątrz obiektu SerializationException przed propagacją wyjątku z powrotem do obiektu wywołującego.

Opis zmiany

BinaryFormatter.Deserialize Wcześniej metoda zezwalała na niektóre dowolne wyjątki, takie jak ArgumentNullException, w celu propagowania stosu do jego obiektów wywołujących.

W programie .NET 5 lub nowszym BinaryFormatter.Deserialize metoda bardziej agresywnie przechwytuje wyjątki występujące z powodu nieprawidłowych operacji deserializacji i opakowuje je w obiekcie SerializationException.

Wprowadzona wersja

5,0

W większości przypadków nie trzeba podejmować żadnych działań. Jeśli jednak lokacja wywołania zależy od określonego wyjątku, możesz odpakować wyjątek z zewnętrznego SerializationExceptionobiektu , jak pokazano w poniższym przykładzie.

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.
}

Dotyczy interfejsów API