Json.NET中的数字格式“R”

时间:2012-01-18 22:58:41

标签: c# json number-formatting

我正在使用Json.NET输出记事本可读的JSON文件。除非非常小的数字(-0.000004)转换为科学记数法,否则输出几乎是完美的。这不是我的意图。

我下载了源代码并在JsonConvert.cs中--JsonConvert.ToString(double),我看到了这一行:

value.ToString("R", CultureInfo.InvariantCulture)

根据C#数字格式文档,“R”应该保证往返,而不是转换为科学记数法,但确实如此。我将格式字符串更改为"0.############",效果很好。但这是正确的方法吗?

2 个答案:

答案 0 :(得分:3)

我会说是的,“0。############”是正确的方法,因为它有效,很容易理解,并且根据the documentation,圆形-Trip格式可能使用也可能不使用科学记数法。唯一的保证是“转换为字符串的数值将被解析回相同的数值”。我没有看到没有使用科学记谱法。

如果您希望它始终是特定的数字位数,那么您可以使用Fixed Point格式。

value.ToString("F8"); // will be 8 digits

答案 1 :(得分:1)

作为一个通用库,我认为JSON.NET使用往返格式做正确的事情。这可确保不丢失任何信息。从实际的角度来看,科学记数法可能比十进制表示法短得多(1e-200需要超过200个字符),所以再次看来,这种实现往返格式的方法是正确的做。

话虽如此,您的使用也完全有效。但是,更改第三方库的源代码会带来其自身的问题。无论何时获得新的JSON.NET版本,都必须应用相同的更改。在某些时候,库的内部工作可能会改变,然后这个修复将不再有效。

在我看来,如果可以的话,最好使用你拥有的东西。在这种情况下,您可以编写自定义转换器并将JsonConverter属性应用于您的媒体资源。这很容易做到:现有的日期/时间转换器应该为您提供一个良好的开端。