从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是 C# 中的对象

Error reading JObject from JsonReader. Current JsonReader item is not an object in C#

我已经编写了一段代码来从货币转换器获取值,如下所示:

WebClient n = new WebClient();
var JsonData = n.DownloadString("http://currencyconverterapi.com/api/v6/convert?q=USD_NRI&compact=ultra&apiKey=");   
JsonData = {"USD_INR":69.657026} // Got value result from JsonData
dynamic JObj = JObject.Parse(JsonData);            
dynamic JOresult = JObject.Parse(Convert.ToString(JObj.USD_INR)); //Got Error here (Error reading JObject from JsonReader. Current JsonReader item is not an object: Float. Path '', line 1, position 9.)        
string JOFilter_Val = Convert.ToString(JOresult.val);
decimal Total = 230 * Convert.ToDecimal(JOFilter_Val);
return Total;

我想通过乘以小数 230 得到值“69.657026”,return 得到最终结果。谁能告诉我我做错了什么,如果可能请更正?

不太清楚您为什么要将 69.657026 解析为 JObject - 它不是对象。

我怀疑您根本不需要这样做 - 只需使用 JObj.USD_INR 作为小数:

decimal value = JObj.USD_INR; // Use the dynamic conversion to handle this

总的来说,您似乎来回转换 远远超过您需要的 。这是我认为您正在尝试做的事情的完整示例:

using Newtonsoft.Json.Linq;
using System;

class Test
{
    static void Main()
    {
        string json = "{ \"USD_INR\": 69.657026 }";
        dynamic obj = JObject.Parse(json);
        decimal rate = obj.USD_INR;
        decimal total = 230 * rate;
        Console.WriteLine(total); // 16021.115980
    }
}

或者,不使用动态类型:

using Newtonsoft.Json.Linq;
using System;

class Test
{
    static void Main()
    {
        string json = "{ \"USD_INR\": 69.657026 }";
        JObject obj = JObject.Parse(json);
        decimal rate = (decimal) obj["USD_INR"];
        decimal total = 230 * rate;
        Console.WriteLine(total);
    }
}