2016-03-16 2 views
-2

Как получить курсы валют от этого конкретного API JSON? Я использовал этот код для разных API, и он отлично работал, но с этим API я не знаю, как получить валютные значения.Json api using HttpClient

Например, этот 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}] 

ответ

1

Ответ JSON вы получаете массив, однако, когда вы настроите DataContractJsonSerializer вы ожидаете один объект, который соответствует RootObject. Измените его на

new DataContractJsonSerializer(typeof(List<RootObject>))

Вам также необходимо изменить строку ReadObject также:

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

Наконец, вам нужно будет изменить тип возвращаемого значения метода: Task<List<RootObject>>.

+0

Большое спасибо, но я получаю «Задача <Список >» - это тип, который недопустим в данном контексте », можете ли вы помочь мне в этом? – Toni0123

+0

Код с изменениями отлично подходит для меня. Это происходит, когда вызывается метод «Dohvati»? –

+0

У меня нет возврата в Задаче Dohvati (string a) {}. Большое спасибо за помощь :) – Toni0123