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

如何使用JSON.NET解析JSON数组中errors属性的message字段?

如何用JSON.NET提取JSON数组中的错误消息?

我明白你之前只处理过单个值的JSON解析,碰到带数组的对象确实会有点懵。先看看你给出的JSON响应:

{ 
  "code": "InvalidObject", 
  "message": "payment object is invalid", 
  "errors": [ 
    { 
      "code": "AccountingApi", 
      "message": "Paid amount cannot be greater than the amount of the invoice.", 
      "resource": "payment", 
      "field": "amount" 
    }, 
    { 
      "code": "AccountingApi", 
      "message": "Payment has not been verified", 
      "resource": "payment", 
      "field": "verification" 
    } 
  ] 
}

你之前尝试的List<string> errorMessages = parsedJson["errors"].ToList<string>();之所以不行,是因为parsedJson["errors"]返回的是JArray类型,里面的每个元素都是JObject(包含code、message等属性的对象),不是直接的字符串,自然没法直接转成List<string>。

这里给你两种常用的解决方法:

方法一:直接遍历JArray(适合快速处理)

你可以用LINQ遍历数组里的每个错误对象,提取其中的message属性:

// 先把errors节点转成JArray(也可以省略强制转换,JSON.NET会隐式处理)
JArray errorsArray = (JArray)parsedJson["errors"];
// 遍历每个JObject,取出message值转成字符串,再收集到List里
List<string> errorMessages = errorsArray.Select(error => (string)error["message"]).ToList();

或者更简洁的写法:

List<string> errorMessages = parsedJson["errors"]
    .Select(error => error["message"].ToString())
    .ToList();

方法二:强类型反序列化(更类型安全,推荐复杂场景)

如果这个JSON结构是你经常会处理的,定义对应的实体类会更稳妥,避免硬编码属性名出错:

首先定义实体类:

public class ErrorResponse
{
    [JsonProperty("code")]
    public string Code { get; set; }
    
    [JsonProperty("message")]
    public string Message { get; set; }
    
    [JsonProperty("errors")]
    public List<ErrorDetail> Errors { get; set; }
}

public class ErrorDetail
{
    [JsonProperty("code")]
    public string Code { get; set; }
    
    [JsonProperty("message")]
    public string Message { get; set; }
    
    [JsonProperty("resource")]
    public string Resource { get; set; }
    
    [JsonProperty("field")]
    public string Field { get; set; }
}

然后反序列化并提取消息:

// 假设jsonString是你的原始JSON字符串
ErrorResponse response = JsonConvert.DeserializeObject<ErrorResponse>(jsonString);
List<string> errorMessages = response.Errors.Select(e => e.Message).ToList();

这样不仅能提取错误消息,整个响应的其他数据也能通过实体类轻松访问,类型检查还能帮你避免拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:04