[英]C# - deserialize json
我正在嘗試編寫一個交易機器人作為學習經驗(不用擔心,我不會使用它)。 我試圖反序列化傳入的數據,但是沒有運氣。 這是我第一次在C#中使用json,但是我已經用其他語言做到了,盡管當然不是很好。
我創建了一個看起來像這樣的類:
public class Coin
{
public string symbol { get; set; }
public double price {get;set;}
}
我正在這樣讀取和讀取數據:
using (WebClient w = new WebClient())
{
try
{
var json = w.DownloadString("https://api.binance.com/api/v3/ticker/price");
int length = json.Length;
string newJson = json.Substring(1, length-2);
//had to create new string because having [] made it crash
Coin coin = JsonConvert.DeserializeObject<Coin>(newJson);
Console.Write(coin); // this does not print anything
}catch(JsonReaderException e){}
}
傳入數據如下所示(或僅點擊鏈接):
{"symbol":"ETHBTC","price":"0.07190100"},{"symbol":"LTCBTC","price":"0.01298100"}
現在,我嘗試僅獲得其中之一,但獲得全部。 首先,我猜我的Coin類存在問題,其次,我不知道如何訪問其中的一個。
謝謝
您正在獲取對象數組,但是您正在嘗試反序列化為單個對象。 有[]
符號的原因。 不要刪除它們。 而是序列化為Coin[]
,然后從該數組中獲取.FirstOrDefault()
。
像這樣:
using System.Linq;
var json = w.DownloadString("https://api.binance.com/api/v3/ticker/price");
var coins = JsonConvert.DeserializeObject<Coin[]>(json);
var firstCoin = coins.FirstOrDefault();
if (firstCoin != null)
{
Console.Write($"Symbol: {firstCoin.symbol}; Price: {firstCoin.price}");
}
我認為您的Coin課程沒有任何問題。 其次,我建議您將JSON反序列化為硬幣列表。
List<Coin> coins = new List<Coin>();
coins = JsonConvert.DeserializeObject<List<Coin>>(newJson);
在您的代碼中,您反序列化了多個硬幣對象,並且想要將它們存儲在一個包含一個硬幣對象的變量中。 這就是為什么我建議列出一個對象列表,以便可以存儲多個硬幣對象的原因。
然后,您可以按索引獲得列表中的一項。
// This returns the first value
var oneItem = coins[0]
我希望這能解決問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.