Guía de Windows Forms y Windows Presentation FoundationBinaryFormatterOLE
En este documento se describen los efectos que tiene la eliminación de BinaryFormatter en escenarios de OLE en Windows Forms y Windows Presentation Foundation (WPF). Para obtener información sobre los efectos de la eliminación de BinaryFormatter en Windows Forms en general, consulte guía de migración de Windows Forms para BinaryFormatter. Para obtener información sobre los efectos de la eliminación de BinaryFormatter en WPF en general, consulte guía de migración de WPF para BinaryFormatter.
BinaryFormatter en escenarios de OLE
Portapapeles
Todos los DataFormats OLE estándar en System.Windows.Forms.DataFormats
y System.Windows.DataFormats
no pasan por BinaryFormatter, excepto en el caso de DataFormats.Serializable
y cualquier formato personalizado. Si usa DataFormats.Serializable
o un formato personalizado, se usa BinaryFormatter si el escenario del Portapapeles implica un tipo que no se controla intrínsecamente como se describe en la guía de migración de Windows Forms para BinaryFormatter y en la guía de migración de WPF: formateador binario. En particular, se usa BinaryFormatter cuando se llama a System.Windows.Forms.Clipboard.SetData o System.Windows.Clipboard.SetData con el tipo y cuando se llama a System.Windows.Forms.Clipboard.GetData o System.Windows.Clipboard.GetData para obtener el tipo. BinaryFormatter también se usa si se llama a System.Windows.Forms.Clipboard.SetDataObject o System.Windows.Clipboard.SetDataObject. Con la eliminación de BinaryFormatter, no verá una excepción al establecer los datos en el Portapapeles si se necesitaba BinaryFormatter. En su lugar, verá una cadena sobre BinaryFormatter que se quita al intentar obtener el tipo que no se controla intrínsecamente desde el Portapapeles.
Característica de arrastrar y colocar
Si el escenario de arrastrar y colocar implica tipos que no se controlan intrínsecamente durante la serialización y deserialización, se usa BinaryFormatter cuando se llama a System.Windows.Forms.Control.DoDragDrop o System.Windows.DragDrop.DoDragDrop y los datos se han arrastrado fuera del proceso. BinaryFormatter también se usa cuando se llama a System.Windows.Forms.DataObject.GetData o System.Windows.DataObject.GetData para recuperar los datos que se originaron en otro proceso si el tipo no se controla intrínsecamente. Con la eliminación de BinaryFormatter, verá una cadena sobre BinaryFormatter que se va a quitar al intentar recuperar los datos que se han originado en otro proceso para los tipos que no se controlan intrínsecamente.
Migración lejos de BinaryFormatter
Portapapeles y arrastrar y colocar
Para los tipos que no se controlan intrínsecamente que se usan en el Portapapeles y las operaciones de arrastrar y colocar, se recomienda dar formato a esos tipos como una carga de byte[]
o string
antes de pasar los datos al Portapapeles o a las API de arrastrar y colocar. Usar JSON es una manera de lograrlo. Deberá realizar ajustes para controlar la recepción de un tipo con formato JSON similar a los ajustes realizados para colocar tipos con formato JSON en el Portapapeles o en operaciones de arrastrar y colocar. Para obtener más información sobre cómo serializar y deserializar el tipo con JSON, consulte Cómo escribir objetos .NET como JSON (serializar).
Problemas
Si experimenta un comportamiento inesperado con su aplicación Windows Forms o WPF con respecto a la serialización o deserialización de BinaryFormatter, registre un problema en github.com/dotnet/winforms o github.com/dotnet/wpf, respectivamente.