我想從
我想獲取資料陣列并創建一個這樣的物件:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace SmartCryptoWorld.Models
{
public class Exchange
{
[JsonProperty("data")]
public List<ExchangeBody> CryptoExchange { get; set; }
}
public class ExchangeBody
{
[JsonProperty("symbol")]
public string Symbol { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("price_usd")]
public double Price { get; set; }
[JsonProperty("percent_change_24h")]
public double Percent_Change_24h { get; set; }
[JsonProperty("percent_change_1h")]
public double Percent_Change_1h { get; set; }
[JsonProperty("percent_change_7d")]
public double Percent_Change_7d { get; set; }
[JsonProperty("market_cap_usd")]
public double Market_Cap_USD { get; set; }
}
}
這是有效的方法,但資料沒有進入 List 并去捕獲例外:
private async Task GetExchange()
{
try
{
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://coinlore-cryptocurrency.p.rapidapi.com/api/tickers/?start=0&limit=100"),
Headers =
{
{ "x-rapidapi-host", "coinlore-cryptocurrency.p.rapidapi.com" },
{ "x-rapidapi-key", "51569aba99mshf9e839fcfce791bp16c0dbjsn9ced6dba7472" },
},
};
using (var response = await client.SendAsync(request))
{
var exchange = new Exchange();
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
var exchangeBody = JsonConvert.DeserializeObject<List<ExchangeBody>>(body);
exchange.CryptoExchange = exchangeBody;
}
}
catch (Exception ex)
{
await DisplayAlert("Alert", "Please, check your internet connection.", "OK");
}
}
在var body = await response.Content.ReadAsStringAsync();我看到來自 API 的資料時,當我使用除錯器跳到下一行時,var exchangeBody = JsonConvert.DeserializeObject<List<ExchangeBody>>(body);我看到了 catch 例外..
所以我 100% 確定物件不是它們應該的樣子?
例外訊息是:
ex {Java.Net.UnknownHostException: Unable to resolve host "coinlore-cryptocurrency.p.rapidapi.com": No address associated with hostname ---> Java.Lang.RuntimeException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname) --- End of inne…}
uj5u.com熱心網友回復:
從請求回傳的 jsonobject不是 a list,您應該將 json 反序列化為objectnot list。
修改你的代碼如下
var exchangeBody = JsonConvert.DeserializeObject<ExchangeBody>(body);
exchange = exchangeBody;
uj5u.com熱心網友回復:
好吧,最簡單的方法是復制 API 呼叫的結果(如果陣列中有更多專案,則更好)并使用 Edit > Paste Special > Paste Json As Classes,現在進行一些更改,您可以擁有你要的課。
注意:您需要在事后檢查類屬性,例如,如果一個屬性可以,double但在您的特定結果中它有一個int值,特殊粘貼可能會考慮這個屬性,int而它不是(以及其他罕見的類似情況),這就是為什么我建議有更多的陣列項以獲得更好的準確性。
還要注意,“選擇性粘貼”僅出現在代碼檔案(.cs、.vb)中,而不出現在視圖、組態檔等中。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387450.html
