C#:JsonConvert反序列化List数据写入Excel及列表访问问题
问题1:遍历Score列表输出类名而非数值的解决办法
你看到ConsoleApp.Program+Score是因为Console.WriteLine默认调用对象的ToString()方法,而自定义的Score类没有重写这个方法,所以输出的是类型的完全限定名称。有两种解决方式:
方式1:直接访问Score类的score属性输出
修改遍历代码,直接输出属性值:
foreach (var s in scores) { Console.WriteLine(s.score); }
方式2:重写Score类的ToString()方法
在Score类中添加ToString()重写,让它直接返回score的字符串形式(还可指定格式):
public class Score { public float score { get; set; } public override string ToString() { return score.ToString("F2"); // 保留两位小数,按需调整格式 } }
之后直接Console.WriteLine(s)就能输出数值。
问题2:将Score列表插入Excel工作表的实现
可以使用EPPlus库来操作Excel,步骤如下:
1. 安装EPPlus NuGet包
在NuGet包管理器中搜索并安装EPPlus,或通过Package Manager Console执行:
Install-Package EPPlus
2. 编写Excel导出代码
using OfficeOpenXml; using System.IO; // 初始化Excel包 using (var excelPackage = new ExcelPackage()) { // 创建工作表 var worksheet = excelPackage.Workbook.Worksheets.Add("分数数据"); // 写入表头 worksheet.Cells[1, 1].Value = "测试分数"; // 遍历Score列表,写入数据 for (int i = 0; i < scores.Count; i++) { // 从第2行开始写入数据(第1行是表头) worksheet.Cells[i + 2, 1].Value = scores[i].score; } // 保存Excel文件到指定路径 var fileInfo = new FileInfo(@"D:\scores.xlsx"); excelPackage.SaveAs(fileInfo); }
额外注意:JSON反序列化的大小写匹配问题
你的Response类中字段是小写的loc和risk,但JSON响应里是大写开头的Loc和Risk,默认情况下Json.NET不会自动映射,可能导致反序列化后loc和risk为null。需要给Response类的字段添加JsonProperty特性来匹配JSON键名:
public class Response { [JsonProperty("Loc")] public Loc loc { get; set; } [JsonProperty("Risk")] public Risk risk { get; set; } }
内容的提问来源于stack exchange,提问作者CGarden
相关产品推荐
相关产品推荐

