反序列化 -0 时,DataContractSerializer 会保留符号
DataContractSerializer 和 DataContractJsonSerializer 以前在将输入“-0”反序列化为浮点值或双精度值时丢弃了该符号。 当将“-0.0”指定为输入时,这两个序列化程序始终执行正确的操作,但输入为“-0”时,符号丢失。 此行为既不一致,又会导致数据丢失。 此外,这些序列化程序还会在序列化期间将负零输出的值写入为“-0”。
旧行为
以前,使用 DataContractSerializer 将“-0”(但不是“-0.0”)反序列化为浮点值或双精度值时,负号丢失。
新行为
现在,将“-0”反序列化为浮点值或双精度值时会保留负号。
引入的版本
- .NET 6.0.11(维护版本)
- .NET 7
中断性变更的类型
此项更改可能会影响二进制兼容性。
更改原因
以前的行为不一致,导致数据丢失。
建议的操作
在大多数情况下,无需执行任何操作。 如果代码受 bug 影响,则这是一个很好的更改。 或者,你已经以一种不太可能被此更改破坏的方式解决 bug。