BinaryFormatter deshabilitado en la mayoría de los tipos de proyecto
Los métodos BinaryFormatter.Serialize(Stream, Object) y BinaryFormatter.Deserialize(Stream) ahora generan NotSupportedException en tiempo de ejecución en casi todos los tipos de proyecto, incluidas las aplicaciones de consola.
Comportamiento anterior
En .NET 7, los métodos BinaryFormatter.Serialize(Stream, Object) y BinaryFormatter.Deserialize(Stream) se marcaron como obsoletos y generaron un error en tiempo de compilación. Sin embargo, si la aplicación suprime la obsolescencia, todavía podría llamar a los métodos y funcionar correctamente en la mayoría de los tipos de proyecto (excepto ASP.NET, WASM y MAUI). Por ejemplo, las API funcionaban correctamente en una aplicación de consola.
Comportamiento nuevo
A partir de .NET 8, los métodos afectados lanzan una excepción NotSupportedException en tiempo de ejecución en todos los tipos de proyecto, excepto Windows Forms y WPF. Las API siguen estando obsoletas (como error) en todos los tipos de proyecto, incluidos Windows Forms y WPF.
Versión introducida
.NET 8 Versión preliminar 4
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
Este cambio en tiempo de ejecución es la siguiente fase del plan de obsolescencia de BinaryFormatter, en el que BinaryFormatter finalmente se quitará de .NET.
Acción recomendada
La mejor medida es migrar de BinaryFormatter
, debido a sus defectos de seguridad y confiabilidad. Para más información, consulte Alternativas preferidas.
Si necesita seguir usando BinaryFormatter
, puede establecer un modificador de compatibilidad en el archivo de proyecto para volver a habilitar la funcionalidad BinaryFormatter
. Para obtener más información, consulte la sección Acción recomendada de la notificación de cambio importante de .NET 7. Ese modificador de compatibilidad aún se respeta en .NET 8.
API afectadas
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream)