使用JsonConvert反序列化REST API响应时,如何仅映射data数组忽略其他字段?
解决JSON反序列化映射问题的两种方法
方法一:定义外层响应类(类型安全推荐)
先创建一个匹配API响应结构的外层类,只保留你需要的data属性(其他外层属性会自动被忽略):
public class ApiResponse { // 仅映射需要的data数组,外层其他属性无需定义 public List<BusinessUnit> Data { get; set; } } // 你的BusinessUnit类,只保留业务需要的字段即可 public class BusinessUnit { public int Id { get; set; } public string Name { get; set; } // 不需要的字段直接不定义,或者用[JsonIgnore]标记 }
修改反序列化代码:
// 先反序列化到外层响应类 var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(response.Content); // 提取data数组就是目标业务单元列表 var businessUnits = apiResponse.Data;
如果JSON里有多余字段导致报错,可添加全局忽略配置:
var settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }; var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(response.Content, settings);
方法二:直接用JObject解析(无需额外类)
不想创建外层类的话,可以直接解析JSON对象提取data数组:
// 先把响应解析成JObject var jsonObj = JObject.Parse(response.Content); // 提取data数组并反序列化为目标列表 var businessUnits = jsonObj["data"].ToObject<List<BusinessUnit>>();
同样,要忽略多余字段的话,搭配配置使用:
var settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }; var businessUnits = jsonObj["data"].ToObject<List<BusinessUnit>>(JsonSerializer.Create(settings));
内容的提问来源于stack exchange,提问作者Zoop
相关产品推荐
相关产品推荐

