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

API返回JSON无法通过DeserializeObject反序列化至APIResponse类问题求助

问题排查与解决方案

核心原因

反序列化后APIResponse所有属性为null,大概率是返回的JSON字段名与类属性名不匹配,或者反序列化配置未适配JSON的命名规则。

具体排查与解决步骤

1. 匹配JSON与类属性的命名风格

从你提供的JSON截图来看,返回的JSON字段采用驼峰命名(如statusCode、isSuccess),而APIResponse类属性是帕斯卡命名(首字母大写,如StatusCode、IsSuccess)。Newtonsoft.Json默认不会自动映射两种命名风格,导致无法匹配赋值。

解决方法一:给类属性添加JsonProperty特性
直接指定每个属性对应的JSON字段名:

public class APIResponse
{
    [JsonProperty("statusCode")]
    public HttpStatusCode StatusCode { get; set; }
    [JsonProperty("isSuccess")]
    public bool IsSuccess { get; set; } = true;
    [JsonProperty("errorMessages")]
    public List<string> ErrorMessages { get; set; }
    [JsonProperty("result")]
    public object Result { get; set; }      
}

解决方法二:全局配置驼峰命名解析器
如果项目中大量接口返回驼峰JSON,可以在反序列化时配置全局规则,避免逐个添加特性:

var apiContent = await apiResponse.Content.ReadAsStringAsync();
var settings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var APIResponse = JsonConvert.DeserializeObject<T>(apiContent, settings);

2. 检查StatusCode的类型兼容性

确认JSON中statusCode字段的类型:

  • 如果是数字(如200):HttpStatusCode枚举可直接匹配,无需额外配置。
  • 如果是字符串(如"OK"):需添加StringEnumConverter支持字符串到枚举的转换:
[JsonProperty("statusCode")]
[JsonConverter(typeof(StringEnumConverter))]
public HttpStatusCode StatusCode { get; set; }

3. 优化Result属性的强类型处理

当前Result为object类型,反序列化后会变成JObject,后续转成BlogPostListModel需手动处理。建议将APIResponse改为泛型类,直接获取强类型结果:

public class APIResponse<T>
{
    [JsonProperty("statusCode")]
    public HttpStatusCode StatusCode { get; set; }
    [JsonProperty("isSuccess")]
    public bool IsSuccess { get; set; } = true;
    [JsonProperty("errorMessages")]
    public List<string> ErrorMessages { get; set; }
    [JsonProperty("result")]
    public T Result { get; set; }      
}

调用时直接指定泛型参数:

// 控制器代码
var response = await _blogService.GetAllAsync<APIResponse<BlogPostListModel>>();
if(response.IsSuccess)
{
    BlogPostListModel list = response.Result;
    // 后续业务逻辑
}

4. 验证JSON结构完整性

确认返回的JSON没有额外嵌套层级(比如外层包裹了data或其他对象),如果有,需要调整类结构或先解析外层对象再提取目标数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:43