如何使用 c# 使用 httpwebrequest 从 json api 获取数据?
Posted
技术标签:
【中文标题】如何使用 c# 使用 httpwebrequest 从 json api 获取数据?【英文标题】:How to get data from json api with c# using httpwebrequest? 【发布时间】:2017-11-30 05:36:37 【问题描述】:我想在我的 c# 控制台应用程序中从 https://api.coinmarketcap.com/v1/ticker/ 获取所有变量。 我该怎么做?
我首先将整个页面作为一个流。现在该怎么办?
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());
【问题讨论】:
你想要什么,一个包含信息的字符串或那个 json 结果的对象表示? 签出:***.com/questions/8270464/… 有几个答案可以帮助您启动和运行 Best way to call a JSON WebService from a .NET Console的可能重复 【参考方案1】:首先你需要一个自定义类用于反序列化:
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;
接下来,您可以使用Newtonsoft Json,一个免费的JSON序列化和反序列化框架,通过以下方式获取您的项目(包括以下using
语句):
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
最后,元素列表存储在items
中。
【讨论】:
【参考方案2】:Keyur PATEL 作品的简化版。
static void GetCoinValues()
string json = new WebClient().DownloadString("https://api.coinmarketcap.com/v1/ticker/");
List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
foreach (var item in items)
Console.WriteLine("ID: " + item.id.ToUpper());
Console.WriteLine("Name: " + item.name.ToUpper());
Console.WriteLine("Symbol: " + item.symbol.ToUpper());
Console.WriteLine("Rank: " + item.rank.ToUpper());
Console.WriteLine("Price (USD): " + item.price_usd.ToUpper());
Console.WriteLine("\n");
【讨论】:
如何使用您的方法获取特定品种的数据?我在循环中添加了 IF (item.symbol = mySymbol) set some variables 但它没有返回任何内容。 没关系,我弄明白了……大小写匹配有问题,所以我不得不大写我的字符串。但是 json 请求似乎限制了列表。没有给出完整的货币清单。无论如何要解决这个问题? 我可以说服你分享你的 github repo 吗? 请注意WebClient
实现 IDisposable
并且应该具有 Using
或以其他方式处置。以上是关于如何使用 c# 使用 httpwebrequest 从 json api 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
要在 C# 中使用 RESTful Web 服务,我应该使用 HttpWebRequest 吗?
如何在 C# 中设置 HttpWebRequest 的内容?
C# httpwebrequest - 使用系统库创建 json 主体