如何格式化JSON值并在DataGridView中显示?附ASP.NET Web API返回示例
如何将ASP.NET Web API返回的JSON格式化并在DataGridView中显示
嘿,我来帮你一步步搞定这个问题!核心思路其实很简单:把JSON数据转换成C#可识别的对象集合,再绑定到DataGridView,下面是具体的实现步骤:
1. 先定义匹配JSON结构的实体类
首先得创建一个和JSON字段一一对应的C#类,这样才能顺利把JSON反序列化过来。根据你给出的JSON内容,这个类可以这么写:
public class ProjectContribution { public string Company { get; set; } public string ProjectName { get; set; } public string Developer { get; set; } public int Hour { get; set; } public int Overtime { get; set; } public string Contribution { get; set; } }
2. 从Web API获取JSON并反序列化
接下来要调用你的Web API拿到完整的JSON字符串,再把它转换成List<ProjectContribution>集合。这里推荐用Newtonsoft.Json(也就是Json.NET,直接通过NuGet就能安装),或者.NET Core/.NET 5+自带的System.Text.Json。
示例代码(HttpClient+Json.NET版本):
using Newtonsoft.Json; using System.Net.Http; using System.Collections.Generic; // 替换成你的Web API实际地址 string apiUrl = "https://your-api-address/api/contribution-data"; using (HttpClient client = new HttpClient()) { // 获取API返回的JSON字符串 string jsonResponse = await client.GetStringAsync(apiUrl); // 把JSON反序列化成对象集合 List<ProjectContribution> contributionList = JsonConvert.DeserializeObject<List<ProjectContribution>>(jsonResponse); // 调用绑定方法把数据给到DataGridView BindDataToGridView(contributionList); }
如果用System.Text.Json,反序列化部分换成这段即可:
using System.Text.Json; List<ProjectContribution> contributionList = JsonSerializer.Deserialize<List<ProjectContribution>>(jsonResponse);
3. 将对象集合绑定到DataGridView
这一步就很简单了,直接把集合赋值给DataGridView的DataSource就行(以WinForms为例):
private void BindDataToGridView(List<ProjectContribution> data) { // 先清空之前的绑定数据 dataGridView1.DataSource = null; // 绑定新的数据源 dataGridView1.DataSource = data; // 可选:让列宽自动适配内容 dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); }
额外小技巧:自定义列显示
如果你不想用自动生成的列,也可以手动配置列的标题、宽度和格式:
// 先关闭自动生成列的功能 dataGridView1.AutoGenerateColumns = false; // 添加自定义列 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Company", // 对应实体类的属性名 HeaderText = "公司名称", // 显示的列标题 Width = 120 }); dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "ProjectName", HeaderText = "项目名称", Width = 150 }); // 其他字段以此类推... // 最后绑定数据源 dataGridView1.DataSource = contributionList;
注意事项
- 确保你的JSON数据是完整且格式正确的(你提供的示例最后是
ProjectNam...,得先修复这个截断问题,否则反序列化会报错)。 - 如果是ASP.NET Web Forms里的DataGridView,思路是一致的,只是绑定可以用
ObjectDataSource或者后台直接赋值。
内容的提问来源于stack exchange,提问作者Sachith Wickramaarachchi
相关产品推荐
相关产品推荐

