如何使用httpwebrequest通过c#从json api获取数据?

如何使用httpwebrequest通过c#从json api获取数据?,c#,json,api,C#,Json,Api,我想从我的c#控制台应用程序中获取所有变量。 我该怎么做 我开始把整个页面作为一个流。现在该怎么办 private static void start_get() { HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create (string.Format("https://api.coinmarketcap.com/v1/ticker/")); WebReq.Method = "GET"; Ht

我想从我的c#控制台应用程序中获取所有变量。 我该怎么做

我开始把整个页面作为一个流。现在该怎么办

private static void start_get()
{
    HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create
        (string.Format("https://api.coinmarketcap.com/v1/ticker/"));

    WebReq.Method = "GET";

    HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

    Console.WriteLine(WebResp.StatusCode);
    Console.WriteLine(WebResp.Server);

    Stream Answer = WebResp.GetResponseStream();
    StreamReader _Answer = new StreamReader(Answer);
    Console.WriteLine(_Answer.ReadToEnd());
}

首先,您需要一个用于反序列化的自定义类:

public class Item
{
    public string id { get; set; }
    public string name { get; set; }
    public string symbol { get; set; }
    public string rank { get; set; }
    public string price_usd { get; set; }
    [JsonProperty(PropertyName = "24h_volume_usd")]   //since in c# variable names cannot begin with a number, you will need to use an alternate name to deserialize
    public string volume_usd_24h { get; set; }
    public string market_cap_usd { get; set; }
    public string available_supply { get; set; }
    public string total_supply { get; set; }
    public string percent_change_1h { get; set; }
    public string percent_change_24h { get; set; }
    public string percent_change_7d { get; set; }
    public string last_updated { get; set; }
}
接下来,您可以通过以下方式使用免费的JSON序列化和反序列化框架来获取项目(使用语句包括以下
):

使用System.Net;
使用System.IO;
使用Newtonsoft.Json;
私有静态void start_get()
{
HttpWebRequest WebReq=(HttpWebRequest)WebRequest.Create(string.Format(“https://api.coinmarketcap.com/v1/ticker/"));
WebReq.Method=“GET”;
HttpWebResponse WebResp=(HttpWebResponse)WebReq.GetResponse();
Console.WriteLine(WebResp.StatusCode);
Console.WriteLine(WebResp.Server);
字符串jsonString;
using(Stream-Stream=WebResp.GetResponseStream())//从代码中修改,因为using语句在完成时自动处理流
{
StreamReader=新的StreamReader(stream,System.Text.Encoding.UTF8);
jsonString=reader.ReadToEnd();
}
List items=JsonConvert.DeserializeObject(jsonString);
Console.WriteLine(items.Count);//返回921,即该页上的项目数
}

最后,元素列表存储在
项中

基尔·帕特尔作品的简化版本

static void GetCoinValues()
{
string json=new WebClient()。下载字符串(“https://api.coinmarketcap.com/v1/ticker/");
List items=JsonConvert.DeserializeObject(json);
foreach(项目中的var项目)
{
Console.WriteLine(“ID:+item.ID.ToUpper());
WriteLine(“Name:+item.Name.ToUpper());
Console.WriteLine(“Symbol:+item.Symbol.ToUpper());
WriteLine(“Rank:+item.Rank.ToUpper());
Console.WriteLine(“价格(美元):”+item.Price_USD.ToUpper());
Console.WriteLine(“\n”);
}
}

您想要什么,一个包含信息的字符串还是json结果的对象表示形式?请检查:有几个答案可以帮助您启动并运行可能的副本,说明如何使用您的方法获取特定符号的数据?我在循环中添加了IF(item.symbol=mySymbol){set some variables},但它不返回任何内容。不管怎样,我发现了它…大小写匹配有问题,所以我必须将字符串大写。然而,json请求似乎限制了列表。没有给出完整的货币清单。无论如何要解决这个问题?我能说服你分享你的github回购协议吗?
using System.Net;
using System.IO;
using Newtonsoft.Json;

private static void start_get()
{
    HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(string.Format("https://api.coinmarketcap.com/v1/ticker/"));

    WebReq.Method = "GET";

    HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

    Console.WriteLine(WebResp.StatusCode);
    Console.WriteLine(WebResp.Server);

    string jsonString;
    using (Stream stream = WebResp.GetResponseStream())   //modified from your code since the using statement disposes the stream automatically when done
    {
       StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
       jsonString = reader.ReadToEnd();
    }

    List<Item> items = JsonConvert.DeserializeObject<List<Item>>(jsonString);

    Console.WriteLine(items.Count);     //returns 921, the number of items on that page
}