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>>
.
如何从此特定 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>>
.