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

如何用C#遍历JSON字典并对比响应与预期响应?

解决C#遍历JSON并对比response与expected_response的问题

问题核心原因

你遇到的错误有三个关键问题:

  1. JSON格式不合法:多个独立JSON对象直接拼接,不是标准的JSON数组,无法正常反序列化为集合。
  2. 属性名映射不匹配:JSON中的expected_response字段和类里的expectedResponse属性未关联,反序列化时会无法正确赋值。
  3. 反序列化类型错误:你把JSON反序列化为单个Letters对象,而foreach只能遍历可枚举集合(如List<T>),单个对象不支持枚举,因此报错。

修正步骤

1. 修复JSON文件格式

将原始JSON改为标准数组格式,用[]包裹所有对象,对象间用逗号分隔:

[
    {
        "request": "AAA",
        "response": "BBB",
        "expected_response": "BBB"
    },
    {
        "request": "CCC",
        "response": "DDD",
        "expected_response": "DDD"
    },
    {
        "request": "EEE",
        "response": "FFF",
        "expected_response": "GGG"
    },
    {
        "request": "HHH",
        "response": "III",
        "expected_response": "III"
    },
    {
        "request": "LLL",
        "response": "YYY",
        "expected_response": "UUU"
    }
]

2. 修正实体类的属性映射

给expectedResponse属性添加JsonProperty特性,匹配JSON中的expected_response字段:

using Newtonsoft.Json; // 需确保项目引用Newtonsoft.Json NuGet包

public class Letters
{
    public string request { get; set; }
    public string response { get; set; }
    [JsonProperty("expected_response")]
    public string expectedResponse { get; set; }
}

3. 修改反序列化与遍历代码

将反序列化目标类型改为List<Letters>,这样就能用foreach遍历每个对象:

// 读取JSON文件内容
var json = System.IO.File.ReadAllText("path/to/json/file.json");

// 反序列化为Letters对象的集合
var lettersRequests = JsonConvert.DeserializeObject<List<Letters>>(json);

// 遍历对比响应与预期值
foreach (var letter in lettersRequests)
{
    if (letter.response == letter.expectedResponse)
    {
        Console.WriteLine($"请求{letter.request}的响应与预期一致");
        // 写入你的业务逻辑
    }
    else
    {
        Console.WriteLine($"请求{letter.request}响应不符:实际{letter.response},预期{letter.expectedResponse}");
        // 处理不一致的情况
    }
}

特殊情况处理(无法修改原始JSON时)

如果不能修改原始JSON文件的格式,可以先读取文本手动修正格式,再反序列化:

var rawJson = System.IO.File.ReadAllText("path/to/json/file.json");
// 将非标准JSON转为合法数组格式
var fixedJson = $"[{rawJson.Replace("}{", "},{")}]";
var lettersRequests = JsonConvert.DeserializeObject<List<Letters>>(fixedJson);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:15:03