簡體   English   中英

C#-反序列化json

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM