当我解析以下 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/