前两天做xml文件反序列化的时候遇到一个报错,我复现了一下。

也就是说我的xml文件中,value是1.79769313486232E+308时,会导致值溢出的问题。那这个值是怎么来的呢,测试了一下,是double.MaxValue序列化的时候输出的。

可是我又没办法改客户的输出程序,想了第一个办法:就是看看能不能自定义double的converter,把异常处理加进去,但是遗憾的是,.net的原生反序列化库不支持自定义converter,当然,也有可能是我没找到方法,总之是失败了。

又生一计,newtonsoft.json支持自定义converter,简单试了下,先将xml转成json,然后再反序列化。发现不报错,但是反序列化的类要重写,算了别瞎耽误功夫了。

又找了,能不能覆写类的setter函数,也没找到对应的语法。

无奈之下,想了个最恶心的招,将1.79769313486232E+308替换为1.7976931348623157E+308。这样字符串会被解析成double.MaxValue。

顺便说下,我的环境是.net framework 4.8.1。最新版本的.net里,double.MaxValue不报错,应该是加了特殊处理。因为我最开始是用在线IDE。(https://dotnet.microsoft.com/zh-cn/platform/try-dotnet)

另,我参考这个文章(https://www.hanselman.com/blog/why-you-cant-doubleparsedoublemaxvaluetostring-or-systemoverloadexceptions-when-using-doubleparse),里面有句话很有意思:

Using Edge Cases as Magic Numbers is more evil than using Magic Numbers.

LOL.

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。