【发布时间】:2018-12-12 20:44:09
【问题描述】:
我目前正在尝试解析从 IEX api 返回的 JSON 数据,其中包含股票及其信息。我遇到的问题是,根据您请求返回的键更改为该符号的股票/符号(即 AAPL、GOOGL 等)。返回的 JSON 示例见此处:https://api.iextrading.com/1.0/stock/market/batch?symbols=aapl,fb,googl&types=quote,chart&range=1m
为了反序列化,我使用 JSON.NET 和以下类:
public class Stock {
public quote Quote { get; set;}
public chart Chart { get; set;}
}
public class Root {
public Stock[] Stock;
}
然后我还有报价和图表对象的类。然后我使用以下方法反序列化 JSON:
var stocks = JsonConvert.DeserializeObject<Root>(jsonstring);
但是,这不起作用,但是在将“Stock”类重命名为符号名称之一时确实有效,但是只有该符号 JSON 被解析。我不知道这里发生了什么,所以非常感谢任何帮助!
【问题讨论】:
-
由于您使用的是 iextrading,您是否考虑过使用已经构建的库以便您不必构建结构?见codepoc.io/blog/web-api/5297/…
-
你可以像下面这样创建你的类: public class AAPL { [JsonProperty("quote")] public Quote Quote; } 公共类 Root { [JsonProperty("AAPL")] 公共 AAPL Appl; } public class Quote { [JsonProperty("symbol")] public string Symbol; // 其他属性 .. }
-
从 API 获取数据的方法:静态异步任务
getStocks() { HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("api.iextrading.com/1.0/stock/market/…); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); return responseBody; } -
我创建了一个简单的控制台应用程序,您可以在 Main 方法中进行这样的转换: static void Main(string[] args) { var data = getStocks().GetAwaiter().GetResult (); var res = JsonConvert.DeserializeObject
(data); // 另一种获取反序列化数据的方法 dynamic stuff = JsonConvert.DeserializeObject(data); var obj1 = stuff.AAPL; var obj2 = stuff.AAPL.quote; var obj3 = stuff.AAPL.quote.symbol; }
标签: c# json parsing json.net mapping