You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中JSON解析问题:解析Alpha Vantage API返回JSON遇困难

解决Alpha Vantage JSON解析问题

嘿,我来帮你搞定这个Alpha Vantage返回的JSON解析难题!首先咱们先看看这个JSON的结构特点:它的顶层是一个名为"Realtime Currency Exchange Rate"的对象,里面的字段键都是带序号、空格和点的特殊格式,这也是你用dynamic可能踩坑的原因——C#里没法直接用点语法访问带空格的属性名。

下面给你两种可行的解决方案:

方案一:用Dynamic结合索引器访问

如果你想继续用dynamic,那得通过索引器来访问那些特殊命名的字段,而不是直接用点语法。代码示例如下:

using System;
using System.Net;
using Newtonsoft.Json;

class Program
{
    static void Main(string[] args)
    {
        string link = "你的Alpha Vantage API链接";
        
        using (var wc = new WebClient())
        {
            string json = wc.DownloadString(link);
            dynamic exchangeData = JsonConvert.DeserializeObject(json);
            
            // 先获取顶层的实时汇率对象
            var realtimeRate = exchangeData["Realtime Currency Exchange Rate"];
            
            // 用索引器访问各个字段,注意键名要完全匹配
            string fromCode = realtimeRate["1. From_Currency Code"];
            string fromName = realtimeRate["2. From_Currency Name"];
            string toCode = realtimeRate["3. To_Currency Code"];
            string toName = realtimeRate["4. To_Currency Name"];
            decimal exchangeRate = decimal.Parse(realtimeRate["5. Exchange Rate"]);
            DateTime lastRefreshed = DateTime.Parse(realtimeRate["6. Last Refreshed"]);
            string timeZone = realtimeRate["7. Time Zone"];
            
            // 测试输出
            Console.WriteLine($"{fromName}({fromCode}) → {toName}({toCode})");
            Console.WriteLine($"汇率: {exchangeRate}");
            Console.WriteLine("最后更新时间: {0} ({1})", lastRefreshed, timeZone);
        }
    }
}

方案二:强类型解析(更推荐)

如果想要更健壮、更易维护的代码,强类型解析是更好的选择。你可以定义和JSON结构对应的实体类,通过JsonProperty特性映射那些特殊的键名,这样就能享受编译时类型检查,避免拼写错误导致的运行时问题。

首先定义实体类:

using Newtonsoft.Json;
using System;

public class RealtimeCurrencyExchangeRate
{
    [JsonProperty("1. From_Currency Code")]
    public string FromCurrencyCode { get; set; }
    
    [JsonProperty("2. From_Currency Name")]
    public string FromCurrencyName { get; set; }
    
    [JsonProperty("3. To_Currency Code")]
    public string ToCurrencyCode { get; set; }
    
    [JsonProperty("4. To_Currency Name")]
    public string ToCurrencyName { get; set; }
    
    [JsonProperty("5. Exchange Rate")]
    public decimal ExchangeRate { get; set; }
    
    [JsonProperty("6. Last Refreshed")]
    public DateTime LastRefreshed { get; set; }
    
    [JsonProperty("7. Time Zone")]
    public string TimeZone { get; set; }
}

public class AlphaVantageCurrencyResponse
{
    [JsonProperty("Realtime Currency Exchange Rate")]
    public RealtimeCurrencyExchangeRate RealtimeCurrencyExchangeRate { get; set; }
}

然后用强类型来解析JSON:

using System;
using System.Net;
using Newtonsoft.Json;

class Program
{
    static void Main(string[] args)
    {
        string link = "你的Alpha Vantage API链接";
        
        using (var wc = new WebClient())
        {
            string json = wc.DownloadString(link);
            var response = JsonConvert.DeserializeObject<AlphaVantageCurrencyResponse>(json);
            
            var rateData = response.RealtimeCurrencyExchangeRate;
            if (rateData != null)
            {
                Console.WriteLine($"{rateData.FromCurrencyName}({rateData.FromCurrencyCode}) → {rateData.ToCurrencyName}({rateData.ToCurrencyCode})");
                Console.WriteLine($"汇率: {rateData.ExchangeRate}");
                Console.WriteLine("最后更新时间: {0} ({1})", rateData.LastRefreshed, rateData.TimeZone);
            }
        }
    }
}

注意:两种方案都需要你安装Newtonsoft.Json(也就是Json.NET)NuGet包,如果你还没装的话,在NuGet包管理器里搜索安装即可。

内容的提问来源于stack exchange,提问作者Bautistf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:47:52