本文件概述了 BinaryFormatter 移除對 OLE 和 Windows Forms (Windows Presentation Foundation) 中 WPF 情境的影響。 若想進一步了解 BinaryFormatter 移除對 Windows Forms 的影響,請參見 Windows Forms 的 BinaryFormatter 移轉指南。 若想進一步了解 BinaryFormatter 移除對 WPF 的影響,請參見 WPF 的 BinaryFormatter 移轉指南。
BinaryFormatter 情境中的 OLE
剪貼簿
在 OLE 和 System.Windows.Forms.DataFormats 中,所有標準的 System.Windows.DataFormats 資料格式都不通過 BinaryFormatter,除了 DataFormats.Serializable 和任何自訂格式。 如果您使用的是 DataFormats.Serializable 或自訂格式,當您的剪貼簿情境涉及一個在 BinaryFormatter 移轉指南中未內建處理的類型時,則會使用 Windows Forms,具體情況可參見 BinaryFormatter 和 WPF移轉指南 – 二進位格式器。 特別是,當使用您的類型呼叫 BinaryFormatter 或 System.Windows.Forms.Clipboard.SetData 時,以及當呼叫 System.Windows.Clipboard.SetData 或 System.Windows.Forms.Clipboard.GetData 來獲取您的類型時,都使用 System.Windows.Clipboard.GetData。 如果呼叫 BinaryFormatter 或 System.Windows.Forms.Clipboard.SetDataObject,也會使用 System.Windows.Clipboard.SetDataObject。 移除 BinaryFormatter 後,如果需要 BinaryFormatter,您在剪貼簿上設定資料時將不會看到例外狀況。 相反地,當您嘗試從剪貼簿中獲取未內建處理的類型時,您會看到即將移除 BinaryFormatter 的字串。
拖放功能
如果您的拖放情境涉及在序列化和反序列化過程中未內建處理的類型,當呼叫 BinaryFormatter 或 System.Windows.Forms.Control.DoDragDrop 且資料已拖放到程序外時,會使用 System.Windows.DragDrop.DoDragDrop。 如果類型未內建處理,當呼叫 BinaryFormatter 或 System.Windows.Forms.DataObject.GetData 以檢索來自另一個程序的資料時,也會使用 System.Windows.DataObject.GetData。 移除 BinaryFormatter 後,當您嘗試檢索來自另一個程序的未內建處理類型的資料時,您將看到即將移除 BinaryFormatter 的字串。
移轉離開 BinaryFormatter
剪貼簿和拖放作業
對於在剪貼簿和拖放作業中使用的未內建處理的類型,建議您先將這些類型格式化為 byte[] 或 string 酬載,再將資料傳遞到剪貼簿或拖放 API。 其中一個方法是使用 JSON。 您需要進行調整,以處理接收 JSON 格式類型,這些調整類似於將 JSON 格式類型放置於剪貼簿或拖放作業中的調整。 如需進一步了解如何使用 JSON 進行序列化和還原序列化,請參見如何將 .NET 物件寫入為 JSON (序列化)。
問題
如果您在 Windows Forms 或 WPF 應用程式中遇到與 BinaryFormatter 的序列化或反序列化非預期的行為,請在 github.com/dotnet/winforms 或 github.com/dotnet/wpf 分別提出問題。