Я использую Json.NET сборки NewtonSoft, чтобы загрузить файл .json в C# консольное приложение. Я думаю, что я выполнил большую часть работы, кроме того, что обнаружил, что некоторые отрицательные значения float округляются.Разбор JSON округляет отрицательные значения
Вот соответствующий код; как вы можете видеть, я пробовал и методы load
, и parse
, но те же результаты.
string content;
using (StreamReader reader = new StreamReader("C:\\[Path]\brackett_full_room.json"))
{
content = reader.ReadToEnd();
}
//// JObject rss = JObject.Load(reader);
JObject rss = JObject.Parse(content);
Исходные значения, как:
"geometry" : { "rings" : [ [ [ -9221300.3411999997, 4120326.8838 ],
[ -9221300.2146000005, 4120327.992399998 ]...
Но -9221300.3411999997
становится чем-то вроде -9221300.3412
в переменной rss
, и это вызывает координаты, чтобы не работать; длинные положительные значения прекрасны.
Есть ли способ сохранить точность достаточно высоко (то есть должно быть достаточно цифр, если проанализировано как double
вместо float
)?
Вместо анализа на JObject (который может использовать неправильные типы для этого случая, Незнайка, который выбирается), создать несколько классов, которые соответствуют дерево объектов JSON с правильная типизация (не уверен, что двойной или плавающий или десятичный в этом случае, возможно, десятичный?) и десериализовать на это? – Will
Спасибо. Если это произойдет, мне придется загружать в нечто иное, чем JObject, и, возможно, даже большую часть работы удаляю из сборки JSON.NET? – IrfanClemson
Ваша проблема заключается в отсутствии точности в числах с двойной плавающей запятой. Это не проблема JSON.net, это проблема с типом [double] (https://msdn.microsoft.com/en-us/library/678hzkk9.aspx). –