如何在C#中将List<Model>转换为指定结构的JSON字符串?
在C#中将数据列表转换为带表头和值的目标格式
实现思路
核心是拆分表头(headers)与数据值(values),再将两者包装为对应结构,最终序列化(或拼接)成你需要的格式。以下是两种实用实现方式:
方式1:基于实体类(类型安全,推荐)
如果数据有固定结构,先定义实体类,再提取数据:
步骤1:定义实体类
public class CompanyRecord { public int ID { get; set; } public string ENT_COMPANY1 { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
步骤2:准备数据源
var dataList = new List<CompanyRecord> { new CompanyRecord { ID = 5658830, ENT_COMPANY1 = "Support And Training Services Llc", FirstName = "PAM", LastName = "FINNESAND" }, new CompanyRecord { ID = 5658831, ENT_COMPANY1 = "Training Services Llc", FirstName = "Bob", LastName = "MCCART" } };
步骤3:拆分表头和值
手动指定表头(避免反射开销,更直观),按顺序提取每个数据项的字段值:
// 定义表头 var headers = new List<string> { "ID", "ENT_COMPANY1", "FirstName", "LastName" }; // 提取值列表:按表头顺序取出每个字段的值 var values = dataList.Select(record => new List<object> { record.ID, record.ENT_COMPANY1, record.FirstName, record.LastName }).ToList();
步骤4:生成目标格式
使用.NET自带的System.Text.Json序列化(也可使用Newtonsoft.Json),并拼接成示例中的动态赋值格式:
using System.Text.Json; // 包装成目标结构 var result = new { values = values, headers = headers }; // 序列化为格式化的JSON字符串 var json = JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true }); // 拼接成最终格式 var finalOutput = $"dynamic data = {json};"; // 输出或使用结果 Console.WriteLine(finalOutput);
方式2:基于匿名对象(无需实体类)
如果数据结构不固定,或不想定义实体类,可直接用匿名对象:
using System.Text.Json; // 匿名数据源 var dataList = new List<object> { new { ID = 5658830, ENT_COMPANY1 = "Support And Training Services Llc", FirstName = "PAM", LastName = "FINNESAND" }, new { ID = 5658831, ENT_COMPANY1 = "Training Services Llc", FirstName = "Bob", LastName = "MCCART" } }; // 手动指定表头 var headers = new List<string> { "ID", "ENT_COMPANY1", "FirstName", "LastName" }; // 提取值:通过反射获取匿名对象的属性值(需保证属性名与表头一致) var values = dataList.Select(item => headers.Select(header => item.GetType().GetProperty(header).GetValue(item)).ToList()).ToList(); // 生成目标格式 var result = new { values, headers }; var json = JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true }); var finalOutput = $"dynamic data = {json};";
最终输出效果
运行后会得到你期望的格式:
dynamic data = { "values": [ [ 5658830, "Support And Training Services Llc", "PAM", "FINNESAND" ], [ 5658831, "Training Services Llc", "Bob", "MCCART" ] ], "headers": [ "ID", "ENT_COMPANY1", "FirstName", "LastName" ] };
内容的提问来源于stack exchange,提问作者Mhd
相关产品推荐
相关产品推荐

