【问题标题】:Get Exchange Rate From Currency Converter API in C#从 C# 中的货币转换器 API 获取汇率
【发布时间】:2018-11-16 15:51:12
【问题描述】:

这是我的 api 调用:

https://free.currencyconverterapi.com/api/v6/convert?q=EUR_USD&compact=y

我写了一个方法,接受到/从汇率参数,我成功地得到了一个结果。我的问题是解析该结果以获取值。到目前为止,这是我所拥有的:

public async Task<string> GetExchangeRate(string from, string to)
{
    //Examples:
    //from = "EUR"
    //to = "USD"
    using (var client = new HttpClient())
    {
        try
        {
            client.BaseAddress = new Uri("https://free.currencyconverterapi.com");
            var response = await client.GetAsync($"/api/v6/convert?q={from}_{to}&compact=y");
            var stringResult = await response.Content.ReadAsStringAsync();
            dynamic data = JObject.Parse(stringResult);
            //data = {"EUR_USD":{"val":1.140661}}
            //I want to return 1.140661
            //EUR_USD is dynamic depending on what from/to is
            return data.?????.val;
        }
        catch (HttpRequestException httpRequestException)
        {
            Console.WriteLine(httpRequestException.StackTrace);
            return "Error calling API. Please do manual lookup.";
        }
    }
}

如果我的数据变量 = {"EUR_USD":{"val":1.140661}} 其中 "EUR_USD" 是动态的(它会根据 to/from 进行更改),那么我如何返回 1.140661?

我使用的答案 这是我根据@macchettura 评论使用的代码:

var stringResult = await response.Content.ReadAsStringAsync();
var dictResult = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(stringResult);
return dictResult[$"{from}_{to}"]["val"];

【问题讨论】:

  • 反序列化为Dictionary&lt;string, Dictionary&lt;string, decimal&gt;&gt;

标签: c# json parsing


【解决方案1】:

谢谢@maccettura。

var stringResult = await response.Content.ReadAsStringAsync();
var dictResult = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(stringResult);
return dictResult[$"{from}_{to}"]["val"];

【讨论】:

    【解决方案2】:

    如果您仍在寻找通过 C# 中的 API 获取汇率的解决方案,您可以在此处尝试此代码:https://currencyfreaks.com/documentation.html#Latest

    var client = new RestClient("https://api.currencyfreaks.com/latest
        ?apikey=YOUR_APIKEY
        &base=GBP
        &symbols=EUR,USD,PKR,INR");
    
    client.Timeout = -1;
    
    var request = new RestRequest(Method.GET);
    
    IRestResponse response = client.Execute(request);
    
    Console.WriteLine(response.Content);
    

    【讨论】:

      【解决方案3】:

      因为它是用 Newtonsoft.JSON 解析的,所以使用JProperty 来读取属性。

      foreach (JProperty property in data)
      {
            Console.WriteLine(property.Name);
            Console.WriteLine(property.Value);
      }
      

      【讨论】:

        【解决方案4】:

        Asp.net MVC 1:从本网站获取您的免费 API 密钥:注意:每月检索 50 000 个免费请求。

        https://freecurrencyapi.net/
        

        2:使用此代码:

                        var CRFrom = "USD";
                        WebClient client = new WebClient();
                        string getString = client.DownloadString("https://freecurrencyapi.net/api/v2/latest?apikey=API KEY&base_currency=" + CRFrom + "");
                        JObject GetData = JObject.Parse(getString);
                        string JPY = (string)GetData["data"]["JPY"];
                        string CNY = (string)GetData["data"]["CNY"];
                        string CHF = (string)GetData["data"]["CHF"];
                        string CAD = (string)GetData["data"]["CAD"];
                        string MXN = (string)GetData["data"]["MXN"];
                        string INR = (string)GetData["data"]["INR"];
                        string BRL = (string)GetData["data"]["BRL"];
                        string RUB = (string)GetData["data"]["RUB"];
                        string KRW = (string)GetData["data"]["KRW"];
                        string IDR = (string)GetData["data"]["IDR"];
                        string TRY = (string)GetData["data"]["TRY"];
                        string SAR = (string)GetData["data"]["SAR"];
                        string SEK = (string)GetData["data"]["SEK"];
                        string NGN = (string)GetData["data"]["NGN"];
                        string PLN = (string)GetData["data"]["PLN"];
                        string ARS = (string)GetData["data"]["ARS"];
                        string NOK = (string)GetData["data"]["NOK"];
                        string TWD = (string)GetData["data"]["TWD"];
                        string IRR = (string)GetData["data"]["IRR"];
                        string AED = (string)GetData["data"]["AED"];
                        string COP = (string)GetData["data"]["COP"];
                        string THB = (string)GetData["data"]["THB"];
                        string ZAR = (string)GetData["data"]["ZAR"];
                        string DKK = (string)GetData["data"]["DKK"];
                        string MYR = (string)GetData["data"]["MYR"];
                        string SGD = (string)GetData["data"]["SGD"];
                        string ILS = (string)GetData["data"]["ILS"];
                        string HKD = (string)GetData["data"]["HKD"];
                        string EGP = (string)GetData["data"]["EGP"];
                        string PHP = (string)GetData["data"]["PHP"];
                        string CLP = (string)GetData["data"]["CLP"];
                        string PKR = (string)GetData["data"]["PKR"];
                        string IQD = (string)GetData["data"]["IQD"];
                        string DZD = (string)GetData["data"]["DZD"];
                        string KZT = (string)GetData["data"]["KZT"];
                        string QAR = (string)GetData["data"]["QAR"];
                        string CZK = (string)GetData["data"]["CZK"];
                        string PEN = (string)GetData["data"]["PEN"];
                        string RON = (string)GetData["data"]["RON"];
                        string VND = (string)GetData["data"]["VND"];
                        string BDT = (string)GetData["data"]["BDT"];
                        string HUF = (string)GetData["data"]["HUF"];
                        string UAH = (string)GetData["data"]["UAH"];
                        string AOA = (string)GetData["data"]["AOA"];
                        string MAD = (string)GetData["data"]["MAD"];
                        string OMR = (string)GetData["data"]["OMR"];
                        string CUC = (string)GetData["data"]["CUC"];
                        string BYR = (string)GetData["data"]["BYR"];
                        string AZN = (string)GetData["data"]["AZN"];
                        string LKR = (string)GetData["data"]["LKR"];
                        string SDG = (string)GetData["data"]["SDG"];
                        string SYP = (string)GetData["data"]["SYP"];
                        string MMK = (string)GetData["data"]["MMK"];
                        string DOP = (string)GetData["data"]["DOP"];
                        string UZS = (string)GetData["data"]["UZS"];
                        string KES = (string)GetData["data"]["KES"];
                        string GTQ = (string)GetData["data"]["GTQ"];
                        string URY = (string)GetData["data"]["URY"];
                        string HRV = (string)GetData["data"]["HRV"];
                        string MOP = (string)GetData["data"]["MOP"];
                        string ETB = (string)GetData["data"]["ETB"];
                        string CRC = (string)GetData["data"]["CRC"];
                        string TZS = (string)GetData["data"]["TZS"];
                        string TMT = (string)GetData["data"]["TMT"];
                        string TND = (string)GetData["data"]["TND"];
                        string PAB = (string)GetData["data"]["PAB"];
                        string LBP = (string)GetData["data"]["LBP"];
                        string RSD = (string)GetData["data"]["RSD"];
                        string LYD = (string)GetData["data"]["LYD"];
                        string GHS = (string)GetData["data"]["GHS"];
                        string YER = (string)GetData["data"]["YER"];
                        string BOB = (string)GetData["data"]["BOB"];
                        string BHD = (string)GetData["data"]["BHD"];
                        string CDF = (string)GetData["data"]["CDF"];
                        string PYG = (string)GetData["data"]["PYG"];
                        string UGX = (string)GetData["data"]["UGX"];
                        string SVC = (string)GetData["data"]["SVC"];
                        string TTD = (string)GetData["data"]["TTD"];
                        string AFN = (string)GetData["data"]["AFN"];
                        string NPR = (string)GetData["data"]["NPR"];
                        string HNL = (string)GetData["data"]["HNL"];
                        string BIH = (string)GetData["data"]["BIH"];
                        string BND = (string)GetData["data"]["BND"];
                        string ISK = (string)GetData["data"]["NOK"];
                        string KHR = (string)GetData["data"]["ISK"];
                        string GEL = (string)GetData["data"]["GEL"];
                        string MZN = (string)GetData["data"]["MZN"];
                        string BWP = (string)GetData["data"]["BWP"];
                        string PGK = (string)GetData["data"]["PGK"];
                        string JMD = (string)GetData["data"]["JMD"];
                        string XAF = (string)GetData["data"]["XAF"];
                        string NAD = (string)GetData["data"]["NAD"];
                        string ALL = (string)GetData["data"]["ALL"];
                        string SSP = (string)GetData["data"]["SSP"];
                        string MUR = (string)GetData["data"]["MUR"];
                        string MNT = (string)GetData["data"]["MNT"];
                        string NIO = (string)GetData["data"]["NIO"];
                        string LAK = (string)GetData["data"]["LAK"];
                        string MKD = (string)GetData["data"]["MKD"];
                        string AMD = (string)GetData["data"]["AMD"];
                        string MGA = (string)GetData["data"]["MGA"];
                        string XPF = (string)GetData["data"]["XPF"];
                        string TJS = (string)GetData["data"]["TJS"];
                        string HTG = (string)GetData["data"]["HTG"];
                        string BSD = (string)GetData["data"]["BSD"];
                        string MDL = (string)GetData["data"]["MDL"];
                        string RWF = (string)GetData["data"]["RWF"];
                        string KGS = (string)GetData["data"]["KGS"];
                        string GNF = (string)GetData["data"]["GNF"];
                        string SRD = (string)GetData["data"]["SRD"];
                        string SLL = (string)GetData["data"]["SLL"];
                        string XOF = (string)GetData["data"]["XOF"];
                        string MWK = (string)GetData["data"]["MWK"];
                        string FJD = (string)GetData["data"]["FJD"];
                        string ERN = (string)GetData["data"]["ERN"];
                        string SZL = (string)GetData["data"]["SZL"];
                        string GYD = (string)GetData["data"]["GYD"];
                        string BIF = (string)GetData["data"]["BIF"];
                        string KYD = (string)GetData["data"]["KYD"];
                        string MVR = (string)GetData["data"]["MVR"];
                        string LSL = (string)GetData["data"]["LSL"];
                        string LRD = (string)GetData["data"]["LRD"];
                        string CVE = (string)GetData["data"]["CVE"];
                        string DJF = (string)GetData["data"]["DJF"];
                        string SCR = (string)GetData["data"]["SCR"];
                        string SOS = (string)GetData["data"]["SOS"];
                        string GMD = (string)GetData["data"]["GMD"];
                        string KMF = (string)GetData["data"]["KMF"];
                        string STD = (string)GetData["data"]["STD"];
                        string XRP = (string)GetData["data"]["XRP"];
                        string AUD = (string)GetData["data"]["AUD"];
                        string BGN = (string)GetData["data"]["BGN"];
                        string BTC = (string)GetData["data"]["BTC"];
                        string JOD = (string)GetData["data"]["JOD"];
                        string GBP = (string)GetData["data"]["GBP"];
                        string ETH = (string)GetData["data"]["ETH"];
                        string EUR = (string)GetData["data"]["EUR"];
                        string LTC = (string)GetData["data"]["LTC"];
                        string NZD = (string)GetData["data"]["NZD"];
        

        【讨论】:

          【解决方案5】:

          以防万一我将此解决方案添加到此处作为通过 JValue 访问的另一种方式:

             return ((JValue)((JProperty)((JContainer)((JContainer)((JContainer)data).First).First).First).Value).Value.ToString();
          

          我更喜欢@maccettura 的答案,因为它的代码更具可读性。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-29
            • 2012-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多