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

如何在C#中解析键动态变化的JSON错误响应?

当然可以!这种键不固定的错误结构,用字典来对应简直是完美的选择,我给你两种最常用的C# JSON处理方案,都是直接就能用的:

使用System.Text.Json(.NET Core/.NET 5+ 内置)

首先我们定义一个匹配JSON结构的模型类,用Dictionary<string, List<string>>来接收那些键不固定的错误项:

public class ErrorResponse
{
    [JsonPropertyName("errors")]
    public Dictionary<string, List<string>> Errors { get; set; }
}

然后就能直接反序列化并处理错误了:

// 示例JSON字符串,包含多个错误
string jsonResponse = "{ \"errors\": { \"title\": [\"can't be blank\"], \"inventory_policy\": [\"is not included in the list\"] } }";

// 反序列化
var errorResult = JsonSerializer.Deserialize<ErrorResponse>(jsonResponse);

// 遍历所有错误
if (errorResult?.Errors != null)
{
    foreach (var errorEntry in errorResult.Errors)
    {
        Console.WriteLine($"出错字段: {errorEntry.Key}");
        foreach (var errorMsg in errorEntry.Value)
        {
            Console.WriteLine($"错误信息: {errorMsg}");
        }
    }
}
使用Newtonsoft.Json(Json.NET)

如果你还在使用旧版.NET Framework,或者更习惯用Json.NET,写法也类似:
先定义模型类:

public class ErrorResponse
{
    [JsonProperty("errors")]
    public Dictionary<string, List<string>> Errors { get; set; }
}

然后反序列化并处理:

string jsonResponse = "{ \"errors\": { \"title\": [\"can't be blank\"], \"inventory_policy\": [\"is not included in the list\"] } }";

// 反序列化
var errorResult = JsonConvert.DeserializeObject<ErrorResponse>(jsonResponse);

// 遍历错误的逻辑和上面完全一致
if (errorResult?.Errors != null)
{
    foreach (var errorEntry in errorResult.Errors)
    {
        Console.WriteLine($"出错字段: {errorEntry.Key}");
        foreach (var errorMsg in errorEntry.Value)
        {
            Console.WriteLine($"错误信息: {errorMsg}");
        }
    }
}
额外小技巧:不用定义模型类直接解析

如果你不想专门写一个ErrorResponse类,也可以直接把JSON反序列化为嵌套字典:

// System.Text.Json版本
var rawErrors = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, List<string>>>>(jsonResponse);
var errors = rawErrors["errors"];

// Json.NET版本
var rawErrors = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, List<string>>>>(jsonResponse);
var errors = rawErrors["errors"];

这种方式的核心逻辑是:JSON里的errors对象正好对应C#的Dictionary<string, List<string>>——每个键是出错的字段名,值是该字段对应的错误信息列表,不管字段名是什么,都能被正确解析出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:04