#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);
}
}