При сериализации поплавков и удвоений Json.NET всегда добавляет ".0" в конце, если число не содержит дробной части. Мне было интересно, есть ли простой способ обойти это, чтобы привести к более компактному представлению? Дополнительные периоды и нули складываются при сериализации объекта, содержащего много чисел.
Например, при запуске этого кода:
JsonConvert.SerializeObject(1.0);
Я ожидал бы (и хочу) этот результат:
"1"
Но вместо этого я получаю:
"1.0"
Я посмотрел исходный код и заметил, что он был специально добавлен в commit 0319263 ( "...- Исправлен 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, похоже, не требует этого.
-
Есть ли простой способ обойти его?