Newtonsoft.Json.DeserializeObject反序列化后sys_id为NULL问题排查
问题原因及解决方法
你的问题出在JSON结构和C#类结构不匹配:
- 你获取的JSON最外层是一个对象,其中
result字段是一个数组(用[]包裹),数组里才是包含sys_id的单个对象。 - 但你直接用
result类去反序列化整个JSON对象,这个类只对应数组里的元素,无法匹配外层的结构,所以sys_id始终为null。
正确的类定义
需要先定义一个根类来匹配JSON的外层结构:
public class ApiResponse { public List<result> result { get; set; } } public class result { public string sys_id { get; set; } }
正确的反序列化代码
var response = Newtonsoft.Json.JsonConvert.DeserializeObject<ApiResponse>(jsonString); // 取数组里的第一个元素的sys_id string sysId = response.result?.FirstOrDefault()?.sys_id;
另一种临时解决方法(不推荐长期使用)
如果不想新增根类,也可以直接解析JSON数组:
JObject jsonObj = JObject.Parse(jsonString); JArray resultArray = (JArray)jsonObj["result"]; result x = resultArray.FirstOrDefault()?.ToObject<result>(); // 此时x.sys_id就能拿到对应值
内容的提问来源于stack exchange,提问作者John H.
相关产品推荐
相关产品推荐

