反序列化 -0 时,DataContractSerializer 会保留符号

DataContractSerializerDataContractJsonSerializer 以前在将输入“-0”反序列化为浮点值或双精度值时丢弃了该符号。 当将“-0.0”指定为输入时,这两个序列化程序始终执行正确的操作,但输入为“-0”时,符号丢失。 此行为既不一致,又会导致数据丢失。 此外,这些序列化程序还会在序列化期间将负零输出的值写入为“-0”。

旧行为

以前,使用 DataContractSerializer 将“-0”(但不是“-0.0”)反序列化为浮点值或双精度值时,负号丢失。

新行为

现在,将“-0”反序列化为浮点值或双精度值时会保留负号。

引入的版本

  • .NET 6.0.11(维护版本)
  • .NET 7

中断性变更的类型

此项更改可能会影响二进制兼容性

更改原因

以前的行为不一致,导致数据丢失。

在大多数情况下,无需执行任何操作。 如果代码受 bug 影响,则这是一个很好的更改。 或者,你已经以一种不太可能被此更改破坏的方式解决 bug。

受影响的 API