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

Yahoo! Finance API返回JSON映射C#对象及反序列化报错问题咨询

问题根因

报错的根本原因是直接对HttpWebResponse对象调用ToString()方法,该方法没有被重写,默认返回的是对象的类型名称字符串System.Net.HttpWebResponse,而非接口返回的JSON内容,所以Newtonsoft解析时第一个字符遇到'S'就抛出了格式异常。

解决方案

正确读取响应流中的JSON内容

你需要从HttpWebResponse的响应流中读取实际返回的JSON字符串,再执行反序列化操作,适配你现有代码的修改示例如下:

string BaseURL = "https://yfapi.net/v6/finance/quote?symbols=AAPL";
string addSymbol = "%2C";
string URL = BaseURL;

foreach (string stock in stocks)
{
    URL += addSymbol + stock;
}

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Headers.Add("X-API-KEY", "[My API key]");

// 用using块自动释放响应资源
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    Console.WriteLine(response.ContentType);
    Console.WriteLine(response.StatusCode);
    
    // 从响应流读取完整JSON字符串
    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        string jsonContent = sr.ReadToEnd();
        // 传入实际JSON字符串完成反序列化
        Results result = JsonConvert.DeserializeObject<Results>(jsonContent);
    }
}

额外注意事项

  • 所有实现了IDisposable接口的对象(如HttpWebResponse、StreamReader)建议用using块包裹,自动释放资源避免内存泄漏
  • 确认自定义的Results、Stock类的属性访问修饰符为public,且嵌套层级和你用Postman拿到的JSON结构完全匹配,避免反序列化时属性值为null的问题
  • 如果你使用的是.NET Core 3.0+ / .NET 5+版本,也可以选择系统内置的System.Text.Json库完成反序列化,无需引入第三方Newtonsoft库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:18:04