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

C#反序列化API响应时coversio_rates字段始终为null如何解决?

问题原因

核心原因是JSON响应中的键名与C#模型属性名不匹配:
你调用的API返回的汇率字段键名为小写蛇形格式的coversio_rates,而你定义的Info类中对应的属性名是首字母大写的Coversio_Rates。你使用的Newtonsoft.Json库默认执行大小写敏感的名称匹配,名称不匹配的字段会跳过赋值,其余字段因为属性名和JSON键名完全一致所以可以正常赋值。

解决方案

以下三种方案任选其一即可:

  • 方案1:修改属性名匹配JSON键名
    直接将Info类中的汇率属性名改为和API返回完全一致的格式:

    public class Info
    {
        public string result { get; set; }
        public string documetatio { get; set; }
        public string base_code { get; set; }
        // 修改属性名和JSON键名完全匹配
        public Coversio_Rates coversio_rates { get; set; }
    }
    
  • 方案2:使用JsonProperty特性指定映射关系(更推荐)
    不需要修改原有属性名,通过特性显式指定反序列化时对应的JSON键名,符合C#大驼峰命名规范:

    public class Info
    {
        public string result { get; set; }
        public string documetatio { get; set; }
        public string base_code { get; set; }
        [JsonProperty("coversio_rates")]
        public Coversio_Rates Coversio_Rates { get; set; }
    }
    
  • 方案3:全局配置蛇形命名策略(适配同规则的整个接口项目)
    如果你对接的整个项目的API返回都是小写蛇形命名格式,可以全局配置反序列化规则,不需要单独给每个属性加特性:

    string response = await apiResponse.Content.ReadAsStringAsync();
    var typetoReturn = JsonConvert.DeserializeObject<Info>(response, new JsonSerializerSettings
    {
        ContractResolver = new DefaultContractResolver
        {
            NamingStrategy = new SnakeCaseNamingStrategy()
        }
    });
    

额外优化建议

  • 你当前使用.Result同步等待异步方法返回,高并发场景下有死锁风险,建议改为await异步读取响应内容
  • 汇率类的属性建议用decimal类型替代float,避免浮点精度丢失问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:51:01