SerializationFormat.Binary 已淘汰
DataTable 和 DataSet 的 SerializationFormat.Binary 已淘汰。 二進位序列化仰賴 BinaryFormatter,而這並不安全。 如果您在程式碼中使用 SerializationFormat.Binary,在編譯時期會產生淘汰警告 SYSLIB0038。
此外,如果您進行下列設定,在執行時間會擲回 InvalidEnumArgumentException:
- 將 DataSet.RemotingFormat 或 DataTable.RemotingFormat 設為 SerializationFormat.Binary。
- 使用二進位資料呼叫 DataTable 或 DataSet 的其中一個還原序列化建構函式。
先前的行為
先前,可以透過將 DataTable 和 DataSet 的 RemotingFormat 屬性設定為 SerializationFormat.Binary (在幕後使用 BinaryFormatter),來進行序列化和還原序列化。
新的行為
從 .NET 7 開始,如果您嘗試,將 DataTable 和 DataSet 的 RemotingFormat 屬性設定為 SerializationFormat.Binary 來進行序列化或還原序列化,則會擲回 InvalidEnumArgumentException。
導入的版本
.NET 7
中斷性變更的類型
變更原因
SerializationFormat.Binary 會透過 BinaryFormatter 實作,而這並不安全,且即將從整個 .NET 堆疊淘汰。
建議的動作
如果您的程式碼使用 SerializationFormat.Binary,請切換為使用 SerializationFormat.Xml,或使用另一個序列化方法。
或者,您可以設定 Switch.System.Data.AllowUnsafeSerializationFormatBinary
AppContext 切換。 這個參數可讓您選擇允許使用 SerializationFormat.Binary,讓程式碼可以像之前一樣運作。 不過,此參數會在 .NET 8 中移除。 如需設定此參數的相關資訊,請參閱適用於程式庫取用者的 AppContext。
受影響的 API
- System.Data.SerializationFormat.Binary
- DataSet.RemotingFormat
- DataTable.RemotingFormat
- DataSet(SerializationInfo, StreamingContext)
- DataSet(SerializationInfo, StreamingContext, Boolean)
- DataTable(SerializationInfo, StreamingContext)