c# - newtonsoft json仅解析16位有效数字

标签 c# json json.net precision

当我解析以下 json 时:

{
    "Item1": 123456789.0123456789,
    "Item2": "123456789.0123456789",
    "Item3": 1.234567890123456789,
    "Item4": 1234567890123456789
}

像这样:

string data = "{\"Item1\":123456789.0123456789,\"Item2\":\"123456789.0123456789\",\"Item3\":1.234567890123456789,\"Item4\":1234567890123456789}";
JObject json = JsonConvert.DeserializeObject<JObject>(data, new JsonSerializerSettings { DateParseHandling = DateParseHandling.None });
Console.WriteLine(json["Item1"].Value<decimal>());
Console.WriteLine(json["Item2"].Value<decimal>());
Console.WriteLine(json["Item3"].Value<decimal>());
Console.WriteLine(json["Item4"].Value<decimal>());

然后我得到以下输出:

123456789,012346
123456789,0123456789
1,23456789012346
1234567890123456789

在我的实际 json 数据源输入中,类似于 "name":123456789.0123456789。如何在不丢失精度的情况下解析其整个十进制值?

最佳答案

您可以使用FloatParseHandling Enumeration指示它反序列化为十进制:

JObject json = JsonConvert.DeserializeObject<JObject>(data, 
    new JsonSerializerSettings { 
        DateParseHandling = DateParseHandling.None, 
        FloatParseHandling = FloatParseHandling.Decimal // Added new setting
    });

(您没有指定您使用的 Newtonsoft 版本,因此我假设是最新版本)

关于c# - newtonsoft json仅解析16位有效数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49189362/

相关文章:

c# - 隐藏/静音 ChromeDriver 窗口

c# - C#中的隐式类型转换

c# - 更改基本 MVVM 的当前实现以遵守 SOLID 模式

c# - 使用 Enumerable.Range() 填充字典时出现问题

javascript - JavaScript 中的 JSON 数组中的键数是否有上限?

c# - 我收到错误消息,其中包含 JSON 对象中的字节数组字段

javascript - 清理标记的 JSON 响应

ios - 显示播客列表中的剧集列表

c# - NewtonSoft JsonConvert 列表

c# - Newtonsoft Json 将字典反序列化为 DataContractJsonSerializer 中的键/值列表