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

C#遍历多对象JSON数组取值并绑定到WinForms DataGridView控件

实现方法

首先先处理你现有代码的前置问题:你当前存储JSON的txt文件中,数组闭合标记}]之后混入了半截C#类构造函数的代码,这部分不属于合法JSON内容,直接调用反序列化方法会抛出格式错误,你需要先把文件里}]之后的所有冗余内容删除,保证文件内仅保留完整的JSON数组结构。

你反序列化得到的ReservationList是强类型的List<Reservation>集合,直接遍历集合取每个对象的属性值,或者直接做数据绑定就能把内容填充到DataGridView里,两种实现方式如下:

方式1:手动逐行填充

适合需要对每行每列内容做自定义处理的场景,代码如下:

private void ShowReservation_Click(object sender, EventArgs e)
{
    // 读取文件内容
    string jsonString = File.ReadAllText(Globals.filepath);
    // 配置反序列化规则:属性名大小写不敏感,避免字段名大小写匹配失败
    JsonSerializerOptions jsonOptions = new JsonSerializerOptions
    {
        PropertyNameCaseInsensitive = true
    };
    // 反序列化得到强类型预约列表
    List<Reservation> reservationList = JsonSerializer.Deserialize<List<Reservation>>(jsonString, jsonOptions);
    
    // 清空表格原有旧数据,避免重复加载
    dataGridView1.Rows.Clear();

    // 遍历所有预约对象,按列顺序添加到表格
    foreach (Reservation item in reservationList)
    {
        dataGridView1.Rows.Add(
            item.Firstname,
            item.Lastname,
            item.Date,
            item.Table,
            item.NumberOfPersons,
            item.Phonenumber
        );
    }
}

注意:Rows.Add()传入的参数顺序必须和你初始化DataGridView时定义的列顺序完全一致,否则会出现内容列错位的问题。

方式2:数据源绑定(推荐)

不需要手动逐行添加,控件会自动完成属性和列的映射,代码更简洁易维护:

private void ShowReservation_Click(object sender, EventArgs e)
{
    string jsonString = File.ReadAllText(Globals.filepath);
    JsonSerializerOptions jsonOptions = new JsonSerializerOptions
    {
        PropertyNameCaseInsensitive = true
    };
    List<Reservation> reservationList = JsonSerializer.Deserialize<List<Reservation>>(jsonString, jsonOptions);
    
    // 关闭自动生成列,使用你提前自定义好的6个列
    dataGridView1.AutoGenerateColumns = false;

    // 给每个自定义列绑定对应的Reservation类属性
    ColumnFirstName.DataPropertyName = nameof(Reservation.Firstname);
    ColumnSecondName.DataPropertyName = nameof(Reservation.Lastname);
    ColumnDate.DataPropertyName = nameof(Reservation.Date);
    ColumnTable.DataPropertyName = nameof(Reservation.Table);
    ColumnNumberOfPersons.DataPropertyName = nameof(Reservation.NumberOfPersons);
    ColumnPhoneNumber.DataPropertyName = nameof(Reservation.Phonenumber);

    // 直接将列表作为数据源绑定到表格,自动完成所有行的填充
    dataGridView1.DataSource = reservationList;
}

额外建议

  • 建议给文件读取、反序列化逻辑加上try-catch异常捕获,处理文件丢失、JSON格式损坏、权限不足等边缘场景,避免程序直接崩溃
  • 如果后续需要修改预约信息,用数据源绑定的方式只需要修改reservationList里的对象值,再重新绑定即可刷新表格,不需要手动操作单元格内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:57:19