Ошибка чтения JObject из JsonReader. Текущий элемент JsonReader не является объектом в C#

#c#-4.0 #mvcrazor

#c #-4.0 #mvcrazor

Вопрос:

Я написал фрагмент кода для получения значения из конвертера валют, как показано ниже:

 WebClient n = new WebClient();
var JsonData = n.DownloadString("http://currencyconverterapi.com/api/v6/convert?q=USD_NRIamp;compact=ultraamp;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;
  

Я хочу получить значение ‘69.657026’ путем умножения на десятичную дробь 230 и вернуть конечный результат. Кто-нибудь может сказать мне, что я делаю неправильно, и, если возможно, пожалуйста, исправьте это?

Ответ №1:

Не совсем понятно, почему вы пытаетесь анализировать 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);
    }
}