Home > other >  C# JsonConvert REST API Json to Class
C# JsonConvert REST API Json to Class

Time:12-13

I've started learning C# and I've been going crazy because of this:

So I've read this of an online API to a string (ORIGINAL URL: https://api.coincap.io/v2/assets)

{"data":
[{"id":"bitcoin","rank":"1","symbol":"BTC","name":"Bitcoin","supply":"19231150.0000000000000000","maxSupply":"21000000.0000000000000000","marketCapUsd":"329260408122.7321099930951000","volumeUsd24Hr":"4938807092.4540332151393315","priceUsd":"17121.2022225780626740","changePercent24Hr":"-0.1557069639360563","vwap24Hr":"17167.6185642050963449","explorer":"https://blockchain.info/"},

{"id":"ethereum","rank":"2","symbol":"ETH","name":"Ethereum","supply":"122373866.2178000000000000","maxSupply":null,"marketCapUsd":"154858258278.7620692762684030","volumeUsd24Hr":"1556598691.7310630183480862","priceUsd":"1265.4520369826888988","changePercent24Hr":"-0.3774876415990869","vwap24Hr":"1271.6091894467065872","explorer":"https://etherscan.io/"},

{"id":"tether","rank":"3","symbol":"USDT","name":"Tether","supply":"65708194111.5796100000000000","maxSupply":null,"marketCapUsd":"65788824004.4908415146900527","volumeUsd24Hr":"6971097526.7488883793650250","priceUsd":"1.0012270903804526","changePercent24Hr":"0.0236756537376818","vwap24Hr":"1.0002996279301237","explorer":"https://www.omniexplorer.info/asset/31"}],

"timestamp":1670800790134}

And basically what I've been trying to do is to put the id's into a list but Haven't manage to parse the data. My code:

public class Coins
    {
        public Dictionary<string, ListDictionary> data { get; set; }
    }

    public class Program
    {

        static void Main(string[] args)
        { 
            List<string> coin_list = new List<string>();

            HttpClient Client = new HttpClient();

            string URL = "https://api.coincap.io/v2/";

            string response = Client.GetStringAsync(URL   "assets").Result; 
            
            Coins list = JsonConvert.DeserializeObject<Coins>(response);

            foreach(item in list.data)
            {
                 coin_list.add(item.id);
            }


            Console.ReadLine();
        }
    }

Can someone explain what am I doing wrong here?

Have spent the past couple of hours trying to figure this out

CodePudding user response:

if you need only ids, all your code you can put in one line

List<string> ids = JObject.Parse(response.Content)["data"]
                          .Select(d => (string)  d["id"]).ToList();

Console.WriteLine(string.Join(",",ids));

if you need more data you add properties you need to Coins class and show them to us, for example

List<Coin> coins = JObject.Parse(response.Content)["data"]
                          .Select(d =>  d.ToObject<Coin>()).ToList();

public class Coin
{
    public string id { get; set; }
    public string rank { get; set; }
    public string symbol { get; set; }
    public string name { get; set; }
    public string supply { get; set; }
    public string maxSupply { get; set; }
    public string marketCapUsd { get; set; }
    public string volumeUsd24Hr { get; set; }
    public string priceUsd { get; set; }
    public string changePercent24Hr { get; set; }
    public string vwap24Hr { get; set; }
    public string explorer { get; set; }
}

or if you want to use your code, fix the class Coins, you need a list for your json, not a dictionary

    public class Coins
    {
        public List<Coin> data { get; set; }
    }
  • Related