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)