Compartilhar via


diretrizes de Windows Forms e Windows Presentation FoundationBinaryFormatterOLE

Este documento descreve os efeitos que a remoção de BinaryFormatter tem em cenários OLE em Windows Forms e Windows Presentation Foundation (WPF). Para obter informações sobre os efeitos da remoção de BinaryFormatter em Windows Forms em geral, consulte Windows Forms guia de migração para BinaryFormatter. Para obter informações sobre os efeitos da remoção de BinaryFormatter em WPF em geral, consulte WPF guia de migração para BinaryFormatter.

BinaryFormatter em OLE cenários

Área de transferência

Todos os OLE DataFormats padrão em System.Windows.Forms.DataFormats e System.Windows.DataFormats não passam por BinaryFormatter, exceto por DataFormats.Serializable e qualquer formato personalizado. Se você estiver usando DataFormats.Serializable ou um formato personalizado, BinaryFormatter será usado se o cenário da área de transferência envolver um tipo que não seja tratado intrinsecamente conforme descrito no guia de migração Windows Forms para BinaryFormatter e WPF Guia de Migração - Formattter Binário. Particularmente, BinaryFormatter é usado quando System.Windows.Forms.Clipboard.SetData ou System.Windows.Clipboard.SetData é chamado com seu tipo e quando System.Windows.Forms.Clipboard.GetData ou System.Windows.Clipboard.GetData é chamado para obter seu tipo. BinaryFormatter também será usado se System.Windows.Forms.Clipboard.SetDataObject ou System.Windows.Clipboard.SetDataObject for chamado. Com a remoção do BinaryFormatter, você não verá uma exceção ao definir os dados na área de transferência se BinaryFormatter for necessário. Em vez disso, você verá uma cadeia de caracteres sobre BinaryFormatter sendo removida quando tentar obter o tipo que não é tratado intrinsecamente da área de transferência.

Recurso do tipo "arrastar e soltar"

Se o cenário de arrastar e soltar envolver tipos que não são tratados intrinsecamente durante a serialização e desserialização, BinaryFormatter será usado quando System.Windows.Forms.Control.DoDragDrop ou System.Windows.DragDrop.DoDragDrop for chamado e os dados forem arrastados para fora do processo. BinaryFormatter também é usado quando System.Windows.Forms.DataObject.GetData ou System.Windows.DataObject.GetData é chamado para recuperar os dados originados de outro processo se o tipo não for tratado intrinsecamente. Com a remoção de BinaryFormatter, agora você verá uma cadeia de caracteres sobre BinaryFormatter sendo removida quando tentar recuperar os dados originados de outro processo para tipos que não são tratados intrinsecamente.

Migrando para longe de BinaryFormatter

Área de transferência e arrastar e soltar

Para tipos que não são tratados intrinsecamente usados em operações de transferência e arrastar e soltar, é recomendável formatar esses tipos como um conteúdo byte[] ou string antes de passar os dados para apIs de transferência ou arrastar e soltar. Usar JSON é uma maneira de conseguir isso. Você precisará fazer ajustes para lidar com o recebimento de um tipo formatado JSON semelhante aos ajustes feitos para colocar tipos formatados JSON na área de transferência ou operações de arrastar e soltar. Para obter mais informações sobre como serializar e desserializar o tipo com JSON, consulte Como escrever objetos .NET como JSON (serializar).

Problemas

Se você tiver um comportamento inesperado com o seu aplicativo Windows Forms seu WPF ou sobre serialização ou desserialização de BinaryFormatter, registre um problema em github.com/dotnet/winforms ou github.com/dotnet/wpf respectivamente.