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

C#客户端反序列化REST Api错误响应字符串为对象失败问题

问题根因

System.Text.Json 默认反序列化逻辑只会识别并赋值 public 访问级别的属性,你当前定义的ResultError类里所有成员都是私有字段,序列化器完全无法访问这些成员,所以反序列化结果只会保留你给字段设置的初始默认值。

修复步骤

第一步:调整ResultError的成员定义

把类里的私有字段全部改成公共属性,修正后的基础代码如下:

public class ResultError
{
    public IDictionary<string, string[]> Errors { get; set; } = new Dictionary<string, string[]>();
    public int Status { get; set; } = 0;
    public string Title { get; set; } = string.Empty;
    public string Type { get; set; } = string.Empty;
}

第二步:处理JSON键名和C#属性名的大小写匹配问题

接口返回的JSON键是小驼峰格式(errors/status/title/type),和C#常用的大驼峰属性名有大小写差异,选择以下任意一种方案处理即可:

  • 方案A:反序列化时开启大小写不敏感匹配,代码改动最小
var serializeOptions = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};
ResultError? error = JsonSerializer.Deserialize<ResultError>(errorData, serializeOptions);
  • 方案B:给属性显式添加JSON字段映射特性,不需要额外传序列化配置
using System.Text.Json.Serialization;

public class ResultError
{
    [JsonPropertyName("errors")]
    public IDictionary<string, string[]> Errors { get; set; } = new Dictionary<string, string[]>();

    [JsonPropertyName("status")]
    public int Status { get; set; } = 0;

    [JsonPropertyName("title")]
    public string Title { get; set; } = string.Empty;

    [JsonPropertyName("type")]
    public string Type { get; set; } = string.Empty;
}

修改完成后反序列化即可正常拿到所有错误数据:Status会正确赋值为400,Title、Type字段会填充对应返回值,Errors字典也会包含Fail to login对应的错误信息数组。

内容的提问来源于stack exchange,提问作者Rafael Alfredo Zelaya Amaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:45:31