无法将请求结果反序列化为Countries模型,变量始终为null求助
排查Json反序列化后对象为null的问题
常见原因及解决步骤
JSON结构与类定义不匹配
这是最核心的问题。你的Countries类根节点是一个包含countries数组的对象,所以JSON必须对应这个结构,比如:{ "countries": [ { "countryName": "China", "region": "Asia", "code": "CN" } ] }如果你的JSON直接是国家数组(比如
[{"countryName":"..."}]),那应该直接反序列化为List<Country>:var Mycountries = JsonConvert.DeserializeObject<List<Country>>(body);属性名称大小写不匹配
Json.NET默认区分大小写,如果JSON中的键是CountryName而类属性是countryName,会导致映射失败。可以通过特性指定匹配键名:public class Country { [JsonProperty("CountryName")] public string countryName { get; set; } [JsonProperty("Region")] public string region { get; set; } [JsonProperty("Code")] public string code { get; set; } }或者全局配置忽略大小写:
var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; var Mycountries = JsonConvert.DeserializeObject<Countries>(body, settings);JSON内容为空或格式非法
先输出body变量的实际内容,确认是否为空字符串,或者JSON格式是否有语法错误(比如缺少括号、逗号)。空内容或非法格式会直接导致反序列化返回null。类的访问权限问题
确保Countries和Country类是public修饰,属性的get访问器正常(你的当前代码已满足,但如果有修改需再次确认)。Json.NET版本兼容问题
旧版本的Json.NET可能存在序列化bug,尝试更新到最新稳定版。
调试技巧
- 直接打印
body内容,确认输入数据是否符合预期。 - 捕获反序列化异常定位具体错误:
try { var Mycountries = JsonConvert.DeserializeObject<Countries>(body); } catch (JsonException ex) { Console.WriteLine(ex.Message); }
内容的提问来源于stack exchange,提问作者SxChoc
相关产品推荐
相关产品推荐

