使用 Newtonsoft 从 Json 字符串中选择值时保留尾随零
Preserving trailing zeros when selecting values from Json String using Newtonsoft
我有一个第三方 api 需要测试并且需要确保返回的值是响应中发送的准确值。例如,如果一个数字返回为 1.000,则它需要为 1.000 而不是 1。
我尝试将字符串响应反序列化为 JObject 并将值 select 转换为 JToken,但下面的 obj1.n2 的值最终为 1。我几乎想 select特定路径的原始值作为字符串,与类型无关。
有没有办法使用 Json.Net 我可以 select obj1.n2 来自下面示例的字符串表示并保留尾随零?
例如:
{
“obj1”:[{
"n1": "n",
“n2”:1.000,
“n3”:真
},
{
"n1": "n",
“n2”:10.000,
“n3”:假
}]
}
因为 C# 小数类型保留尾随零,您可以只指示 Json.Net 将数字解析为小数而不是浮点数。通过将 FloatParseHandling
设置为 FloatParseHandling.Decimal
来执行此操作,如下所示:
var json = @"{ ""obj1"": [{ ""n1"": ""n"", ""n2"": 1.000, ""n3"": true }, { ""n1"": ""n"", ""n2"": 10.000, ""n3"": false }] }";
var token = JsonConvert.DeserializeObject<JToken>(
json,
new JsonSerializerSettings { FloatParseHandling = FloatParseHandling.Decimal });
token["obj1"][0]["n2"]
现在将显示 1.000
而不是 1
。
我有一个第三方 api 需要测试并且需要确保返回的值是响应中发送的准确值。例如,如果一个数字返回为 1.000,则它需要为 1.000 而不是 1。
我尝试将字符串响应反序列化为 JObject 并将值 select 转换为 JToken,但下面的 obj1.n2 的值最终为 1。我几乎想 select特定路径的原始值作为字符串,与类型无关。
有没有办法使用 Json.Net 我可以 select obj1.n2 来自下面示例的字符串表示并保留尾随零?
例如:
{ “obj1”:[{ "n1": "n", “n2”:1.000, “n3”:真 }, { "n1": "n", “n2”:10.000, “n3”:假 }] }
因为 C# 小数类型保留尾随零,您可以只指示 Json.Net 将数字解析为小数而不是浮点数。通过将 FloatParseHandling
设置为 FloatParseHandling.Decimal
来执行此操作,如下所示:
var json = @"{ ""obj1"": [{ ""n1"": ""n"", ""n2"": 1.000, ""n3"": true }, { ""n1"": ""n"", ""n2"": 10.000, ""n3"": false }] }";
var token = JsonConvert.DeserializeObject<JToken>(
json,
new JsonSerializerSettings { FloatParseHandling = FloatParseHandling.Decimal });
token["obj1"][0]["n2"]
现在将显示 1.000
而不是 1
。