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

使用JObject解析HttpClient错误JSON响应至自定义对象失败

解决HttpClient.PostAsync响应JSON解析为ErrorResponse的序列化错误

问题场景

调用HttpClient.PostAsync接口返回错误JSON响应,尝试将其解析为自定义ErrorResponse对象时抛出序列化异常。

接口返回的JSON响应

{
    "ResponseStatus": {
        "ErrorCode": "RegularExpression",
        "Message": "'Color' can contain only latin, numeric characters and the symbol #.",
        "Errors": [
            {
                "ErrorCode": "RegularExpression",
                "FieldName": "Color",
                "Message": "'Color' can contain only latin, numeric characters and the symbol #.",
                "Meta": {
                    "RegularExpression": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
                    "PropertyName": "Color Code",
                    "PropertyValue": "adadad"
                }
            }
        ]
    }
}

自定义错误类定义

public class ErrorResponse
{
    public string ErrorCode { get; set; }
    public string Message { get; set; }
    public FieldErrors[] Errors { get; set; }
}

public class FieldErrors 
{ 
    public string ErrorCode {get; set; }
    public string FieldName {get; set; }
    public string Message {get; set; }
}

原有解析代码

var respCont = await response.Content.ReadAsAsync<JObject>;
var errorResponse = respCont["ResponseStatus"].ToObject<ErrorResponse>();

抛出的错误信息

Newtonsoft.Json.JsonSerializationException: 从'Errors'获取值时出错

解决步骤

1. 修复解析代码的语法错误

原有代码中ReadAsAsync<JObject>缺少调用括号,导致运行时错误,修正后代码:

var respCont = await response.Content.ReadAsAsync<JObject>();
var errorResponse = respCont["ResponseStatus"].ToObject<ErrorResponse>();

2. 处理未知字段(若步骤1无法解决)

JSON响应中每个错误元素包含Meta字段,但自定义FieldErrors类未定义该属性。若Newtonsoft.Json全局配置了MissingMemberHandling.Error,会触发序列化异常。此时可在FieldErrors类添加特性忽略未知属性:

using Newtonsoft.Json;

[JsonIgnoreProperties(Unknown = true)]
public class FieldErrors 
{ 
    public string ErrorCode {get; set; }
    public string FieldName {get; set; }
    public string Message {get; set; }
}

3. 验证全局序列化配置(可选)

确保全局序列化配置未强制要求处理未知字段,若存在如下配置需调整为Ignore:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Ignore
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:23:25