将 Json 数字读取为字符串

问题描述 投票:0回答:1

我需要什么:

  • 将 Json 字符串反序列化为对象
  • 做一些事情
  • 最后以字符串形式返回

问题是什么? 当 Json 具有类似 {"foobar" : 0.0000000000000000001} 的属性时,它会被转换为数字,但随后转换为字符串,以科学记数法表示为 1E-19

有没有办法从 json 中读取数字作为字符串,或者稍后将这样的数字转换为完全相同的字符串,而不会有任何精度损失?精度不固定,json 中的数字可以出现在任何属性中。 使用 Newtonsoft 比 System.Text.Json 更可取(如果可能的话)

我已经尝试过

  1. 创建Newtonsoft的CustomJsonConverter
  2. 使用 System.Text.Json.JsonNumberHandling.WriteAsString
  3. 将浮点数转换为字符串 但这些解决方案都不起作用
  4. 我找不到一种方法将任何数字值视为字符串,我不知道是否可以在这样的转换器中实现
  5. 我认为这个只能以一种方式工作,从 obj 到字符串,这不是我想要的
  6. 这样的转换不起作用,因为它丢失了精度,或者“超出精度”(0.00...01 被写为 0.00...0989919999 或类似这样),或者在末尾添加了额外的零 - 取决于什么我用过的格式

理想情况下,我想将像 {"foobar": 21.37} 这样的字符串转换为具有属性 foobar = "21.37" 的对象,以确保在数字/字符串之间转换后不会丢失任何精度

c# json json.net
1个回答
0
投票

看来只要字段定义为字符串,Newtownsoft.Json就可以将其转换为字符串。

public class Foo
{
    public string str;
}

var json = """{"str":0.0000000000000000001}"""; 
var foo = JsonConvert.DeserializeObject<Foo>(json);
Console.WriteLine(foo.str);
    
© www.soinside.com 2019 - 2024. All rights reserved.