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

从API获取JSON反序列化为C#对象时返回Null,求排查思路

问题分析与解决思路

你的反序列化结果为null主要是JSON结构与C#类的属性映射不匹配导致的,具体问题和解决方法如下:

核心问题

  1. 根节点名称不匹配
    JSON的根层级键是serviceSession(小驼峰、单数),但你的C#类ServiceSession中对应的属性是ServiceSessions(大驼峰、复数)。Json.NET默认会严格匹配属性名称和JSON键名,所以无法找到对应的映射,最终导致反序列化后整个对象为null。

  2. 可选但建议:键名大小写一致性
    JSON里的apn是小写,C#类里的属性是Apn(大驼峰)。虽然Json.NET在默认配置下能处理这种大小写差异,但显式指定映射会让代码更健壮,避免后续出现意外问题。

解决方法

方法一:修改C#类属性名称匹配JSON键

直接把类的属性名改成和JSON根键完全一致:

public class ServiceSession 
{ 
    // 属性名改为和JSON根键"serviceSession"一致
    public Dictionary<string, List<ServiceSessionType>> ServiceSession { get; set; } 
}

public class ServiceSessionType 
{ 
    public string Apn { get; set; } 
}

方法二:使用JsonProperty特性显式映射(推荐)

如果不想修改属性名称,可以用Newtonsoft.Json的JsonProperty特性,指定JSON中对应的键名,这样既保留C#的命名规范,又能正确映射JSON结构:

using Newtonsoft.Json;

public class ServiceSession 
{ 
    [JsonProperty("serviceSession")] // 指定对应JSON的根键
    public Dictionary<string, List<ServiceSessionType>> ServiceSessions { get; set; } 
}

public class ServiceSessionType 
{ 
    [JsonProperty("apn")] // 显式映射JSON中的"apn"键
    public string Apn { get; set; } 
}

额外注意:JSON格式规范性

你提供的JSON用了单引号,虽然Json.NET支持解析单引号的JSON,但标准JSON要求使用双引号,建议修正为标准格式,避免潜在的解析问题:

{"serviceSession":{ "123123123":[{"apn":"abc"},{"apn":"bcd"},{"apn":"def"}]}}

完成以上修改后,再执行var test = JsonConvert.DeserializeObject<ServiceSession>(json);就能得到正确的反序列化结果了。

内容的提问来源于stack exchange,提问作者Gian-Marco Schmid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:13:58