Json api 使用 HttpClient

Json api using HttpClient

如何从此特定 JSON API 获取货币汇率?我已经将此代码用于不同的 APIs,并且工作正常,但是使用此 API 我不知道如何获取货币值。

例如,这个 api: http://api.fixer.io/latest 有效,而代码中的这个无效。

我看到它们不同,但不知道为什么以及有什么不同。

谢谢

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;

namespace Pretvornik
{
   public class Pozovi
   {  
        public async static Task<RootObject> Dohvati()
        {        
            var otvaranje = new HttpClient();
            var url = String.Format("http://hnbex.eu/api/v1/rates/daily/");
            var odgovor = await otvaranje.GetAsync(url);
            var rezultat = await odgovor.Content.ReadAsStringAsync();
            var serija = new DataContractJsonSerializer(typeof(RootObject));

            var memstr = new MemoryStream(Encoding.UTF8.GetBytes(rezultat));
            var podatci = (RootObject)serija.ReadObject(memstr);
            return podatci;
        }
    }

    [DataContract]
    public class RootObject
    {
        [DataMember]
        public string selling_rate { get; set; }
        [DataMember]
        public string buying_rate { get; set; }
        [DataMember]
        public string median_rate { get; set; }
        [DataMember]
        public string currency_code { get; set; }
        [DataMember]
        public int unit_value { get; set; }
    }
}

JSON:

[{"selling_rate": "5.152699", "buying_rate": "5.121875", "median_rate": "5.137287", "currency_code": "AUD", "unit_value": 1}, {"selling_rate": "5.156900", "buying_rate": "5.126052", "median_rate": "5.141476", "currency_code": "CAD", "unit_value": 1}]

您得到的 json 响应是一个数组,但是当您设置 DataContractJsonSerializer 时,您期望的是与 RootObject 匹配的单个对象。将其更改为

new DataContractJsonSerializer(typeof(List<RootObject>))

您还需要将 ReadObject 行也更改为:

(List<RootObject>)serija.ReadObject(memstr);

最后,您需要将方法的 return 类型更改为:Task<List<RootObject>>.