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

使用RestSharp调用NBA API反序列化失败,无法展示页面数据

解决RestSharp调用NBA API的反序列化问题

1. 正确获取RestSharp响应内容

RestSharp的RestResponse已封装好响应内容,无需手动调用ReadAsStringAsync(),直接通过response.Content就能拿到完整JSON字符串。你之前用response.Content.ReadAsStringAsync().Result属于多余操作,因为Content本身就是字符串类型。

2. 解决JsonSerializationException报错

报错的核心原因是API返回的JSON是外层对象包裹response数组的结构,你直接反序列化为IList<NBAModel>会导致类型不匹配,必须先匹配外层JSON结构。

具体步骤:

  • 创建根实体类,对应API返回的外层JSON结构:
public class NBAResponseRoot
{
    // 字段名需和API返回的外层键名完全一致,比如API返回的数组键是"response",就命名为Response
    public List<NBAModel> Response { get; set; }
}
  • 选择以下一种反序列化方式处理:

方式一:用RestSharp内置反序列化(推荐)

RestSharp v107+自带JSON反序列化功能,直接调用内置方法:

var client = new RestClient("你的NBA API地址");
var request = new RestRequest();
var response = client.ExecuteGet(request);

if (response.IsSuccessful)
{
    var nbaRoot = response.Deserialize<NBAResponseRoot>();
    IList<NBAModel> matchData = nbaRoot.Response; // 这里就是5条比赛数据
    // 后续执行插入数据表的逻辑
}
else
{
    // 处理请求失败场景,比如输出错误信息
    Console.WriteLine($"请求失败:{response.ErrorMessage}");
}

方式二:用Newtonsoft.Json手动反序列化

如果习惯用Json.NET,可先获取字符串再手动反序列化:

using Newtonsoft.Json;

// 前面的请求代码不变
if (response.IsSuccessful)
{
    string jsonContent = response.Content;
    var nbaRoot = JsonConvert.DeserializeObject<NBAResponseRoot>(jsonContent);
    IList<NBAModel> matchData = nbaRoot.Response;
    // 执行插入数据表逻辑
}

3. 避免程序崩溃的注意事项

  • 插入数据表前,先判断matchData是否为null或空,防止空引用异常
  • 确保NBAModel的字段名、数据类型和API返回的response数组内的对象完全匹配。如果键名不一致,可通过[JsonProperty("api_key_name")]特性映射,比如:
public class NBAModel
{
    [JsonProperty("game_id")]
    public string GameId { get; set; }
    // 其他字段同理
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:39:16