SerializationFormat.Binary 已过时

SerializationFormat.Binary 和 DataTable 的 DataSet 已过时。 二进制序列化依赖于 BinaryFormatter,这是不安全的。 如果在代码中使用 SerializationFormat.Binary,则编译时将生成过时警告 SYSLIB0038。

此外,在运行时若满足以下条件,将抛出一个 InvalidEnumArgumentException。

旧行为

以前,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.AllowUnsafeSerializationFormatBinaryAppContext 开关。 通过此开关可以选择允许使用 SerializationFormat.Binary,以便代码可以像以前一样工作。 但是,此开关将在 .NET 8 中删除。 有关设置开关的信息,请参阅适用于库使用者的 AppContext。

受影响的 API

另请参阅