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

C#中如何反序列化JSON响应,仅提取errorID与errorText字段?

问题:C#中反序列化JSON响应并仅提取errorID和errorText字段

发送POST请求后得到如下JSON响应:

{
    "correlationID": "00000000-0000-0000-0000-000000000000",
    "scenarioID": 2,
    "scenarioIsAcceptedInPrinciple": false,
    "valid": false,
    "errors": [
        {
            "errorID": 90,
            "errorText": "For the 1st Employment of the 1st Applicant Please provide a valid Landline"
        },
        {
            "errorID": 22,
            "errorText": "The provided value 'string' is not a valid value for the property 'applicants[0][email]'"
        }
    ]
}

我希望在C#中反序列化该响应,提取其中的errorID和errorText字段用于测试断言验证。目前我定义了如下C#类实现反序列化,能获取全部错误数据:

public partial class postRequest
{
    public bool Valid { get; set; }
    public object Errors { get; set; }
}

但我想知道如何仅提取并返回errorID和errorText字段的内容?


方法一:定义强类型类(推荐)

通过强类型实体类匹配JSON结构,既能保证类型安全,也便于后续直接访问目标字段,适合长期维护的测试代码:

  1. 定义对应实体类
// 错误项实体类,匹配JSON中的error结构
public class ErrorItem
{
    // 若使用System.Text.Json,用JsonPropertyName映射字段名
    [JsonPropertyName("errorID")]
    public int ErrorID { get; set; }
    
    [JsonPropertyName("errorText")]
    public string ErrorText { get; set; }
}

// 主响应实体类,匹配完整JSON结构
public partial class PostRequestResponse
{
    [JsonPropertyName("valid")]
    public bool Valid { get; set; }
    
    [JsonPropertyName("errors")]
    public List<ErrorItem> Errors { get; set; }
}
  1. 反序列化并提取目标字段
// 假设responseString是POST请求返回的JSON字符串
var response = JsonSerializer.Deserialize<PostRequestResponse>(responseString);

// 提取仅包含errorID和errorText的集合
var errorDetails = response.Errors.Select(e => new { e.ErrorID, e.ErrorText }).ToList();

// 直接用于测试断言(以xUnit为例)
Assert.Equal(90, errorDetails[0].ErrorID);
Assert.Equal("For the 1st Employment of the 1st Applicant Please provide a valid Landline", errorDetails[0].ErrorText);

方法二:动态解析(无需定义实体类)

如果只是临时需求,不想额外定义实体类,可以直接用JSON解析库动态提取字段:

方案A:Newtonsoft.Json(JObject)

var jObject = JObject.Parse(responseString);
var errors = jObject["errors"].Children<JObject>();

var errorDetails = errors.Select(j => new 
{
    ErrorID = (int)j["errorID"],
    ErrorText = (string)j["errorText"]
}).ToList();

方案B:System.Text.Json(JsonDocument)

using var doc = JsonDocument.Parse(responseString);
var errors = doc.RootElement.GetProperty("errors").EnumerateArray();

var errorDetails = new List<(int ErrorID, string ErrorText)>();
foreach (var error in errors)
{
    errorDetails.Add(
        (error.GetProperty("errorID").GetInt32(), 
         error.GetProperty("errorText").GetString())
    );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:39:05