当序列化浮点数和双精度数时,如果数字不包含任何小数部分,Json.NET总是在末尾添加“ .0”。我想知道是否有一种简单的方法可以绕过此方法,从而获得更紧凑的表示形式?序列化包含许多数字的对象时,多余的句点和零加起来。
例如,运行此代码时:
JsonConvert.SerializeObject(1.0);
我期望(并想要)这个结果:
"1"
但是我得到了:
"1.0"
我查看了源代码,发现它是在提交0319263中故意添加的( “ …- Fixed JsonConvert总是写一个带小数点的浮点数…” ),它运行的代码基本上类似于:
private static string EnsureDecimalPlace(double value, string text) { if (double.IsNaN(value) || double.IsInfinity(value) || text.IndexOf('.') != -1 || text.IndexOf('E') != -1 || text.IndexOf('e') != -1) { return text; } return text + ".0"; }
因此,我想知道:
发生这种变化的原因可能是什么?的JSON规范似乎并不需要它。
有没有简单的方法可以绕过它?
1.发生这种变化的原因可能是什么?
规范不要求它,但也不禁止它。
我的猜测是,它允许对Json.NET进行更好的类型检查(如果它们在某处),或者这是“以防万一”的事情,它可以区分整数和浮点类型。
2.有没有简单的方法可以绕过它?
并不是那么容易,但是如果您真的想要的话,可以将其更改EnsureDecimalPlace()为简单地重新编译自己的Json.NET版本。return text;
EnsureDecimalPlace()
return text;