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

C#解析JSON按dueNum获取monthlyAnnualCostRate报错解决

问题原因

抛出Newtonsoft.Json.JsonReaderException的核心原因是JSON解析逻辑和接口实际返回结构不匹配:

  • 接口返回的JSON根节点为Object类型,需要查询的还款计划记录数组,实际嵌套在响应的data.list路径下
  • 原代码直接调用JArray.Parse()尝试将整个响应内容解析为数组,类型不匹配直接触发异常
修复实现

替换原有的JSON解析和查询逻辑即可,代码中增加了节点空值校验,避免接口返回结构异常时触发空引用错误:

string uri = "https://apis.garantibbva.com.tr:443/loans/v1/paymentPlan";
var client = new RestClient(uri);
var request = new RestRequest(Method.POST);
request.AddHeader("apikey", "l7xx8af86c14ea7e44e0ab3fbfcc6137ae09");
request.AddQueryParameter("loanType", "1");
request.AddQueryParameter("campaignCode", "BankSearch");
request.AddQueryParameter("loanAmount", "10000");
IRestResponse response = client.Execute(request);

var dueNum = 46;
double monthlyAnnualCostRate = default;
// 第一步:解析根级JSON对象
var root = JObject.Parse(response.Content);
// 第二步:定位到data下的list数组,做类型和空值校验
if (root["data"]?["list"] is JArray paymentPlans)
{
    // 第三步:按dueNum匹配对应记录,取目标字段值
    monthlyAnnualCostRate = paymentPlans
        .FirstOrDefault(p => p["dueNum"] != null && (int)p["dueNum"] == dueNum)?
        ["monthlyAnnualCostRate"]?.ToObject<double>() ?? default;
}

_logger.LogInformation("Garanti Bankası Response: {monthlyAnnualCostRate}", monthlyAnnualCostRate);
_logger.LogInformation("Garanti Bankası geçti");
效果验证

传入dueNum=46时,代码会正确遍历data.list下的所有期数记录,匹配到对应项后取到monthlyAnnualCostRate值为1.8800,符合业务预期。

补充提示:如果需要区分「接口返回结构异常」「未找到对应期数记录」「正常取到值」三种场景,可以在对应的判断分支增加日志埋点,方便线上问题排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11