如何用Newtonsoft在C#中解码AlphaVantage返回的股票数据JSON
使用Newtonsoft.Json解码AlphaVantage股票数据JSON响应
步骤1:安装Newtonsoft.Json包
通过NuGet包管理器搜索安装,或者在Package Manager Console中执行命令:
Install-Package Newtonsoft.Json
步骤2:定义匹配JSON结构的实体类
由于AlphaVantage返回的JSON键包含序号和空格,需要用JsonProperty特性映射属性名与JSON键:
using Newtonsoft.Json; using System; public class GlobalQuoteResponse { [JsonProperty("Global Quote")] public GlobalQuote GlobalQuote { get; set; } } public class GlobalQuote { [JsonProperty("01. symbol")] public string Symbol { get; set; } [JsonProperty("02. open")] public decimal Open { get; set; } [JsonProperty("03. high")] public decimal High { get; set; } [JsonProperty("04. low")] public decimal Low { get; set; } [JsonProperty("05. price")] public decimal Price { get; set; } [JsonProperty("06. volume")] public long Volume { get; set; } [JsonProperty("07. latest trading day")] public DateTime LatestTradingDay { get; set; } [JsonProperty("08. previous close")] public decimal PreviousClose { get; set; } [JsonProperty("09. change")] public decimal Change { get; set; } [JsonProperty("10. change percent")] public string ChangePercent { get; set; } }
步骤3:反序列化JSON字符串
获取API返回的JSON字符串后,使用JsonConvert.DeserializeObject方法解析为实体类对象:
// 示例JSON字符串(实际中替换为API返回的内容) string json = @"{ ""Global Quote"": { ""01. symbol"": ""VK.PAR"", ""02. open"": ""10.2300"", ""03. high"": ""10.3500"", ""04. low"": ""10.1400"", ""05. price"": ""10.3200"", ""06. volume"": ""751332"", ""07. latest trading day"": ""2023-06-28"", ""08. previous close"": ""10.2150"", ""09. change"": ""0.1050"", ""10. change percent"": ""1.0279%"" } }"; // 反序列化 var quoteData = JsonConvert.DeserializeObject<GlobalQuoteResponse>(json); // 访问解析后的数据 if (quoteData?.GlobalQuote != null) { Console.WriteLine($"股票代码:{quoteData.GlobalQuote.Symbol}"); Console.WriteLine($"开盘价:{quoteData.GlobalQuote.Open:C}"); Console.WriteLine($"最高价:{quoteData.GlobalQuote.High:C}"); Console.WriteLine($"最新价:{quoteData.GlobalQuote.Price:C}"); Console.WriteLine($"涨跌幅:{quoteData.GlobalQuote.ChangePercent}"); }
注意事项
- 如果API返回的字段可能为空(如休市时无成交量数据),可将对应属性改为可空类型(如
long? Volume、decimal? Open)。 - 建议用
try-catch块包裹反序列化逻辑,捕获JsonSerializationException避免程序崩溃。 - 确保JSON字符串格式正确,无转义错误。
内容的提问来源于stack exchange,提问作者krissam44
相关产品推荐
相关产品推荐

