【发布时间】:2019-11-20 09:08:54
【问题描述】:
我在 .Net Framework 中使用 csvHelper 实现了一个 web api 来导出 csv。
我有课
public class StudentInfo
{
public Student Student {get;set;}
public Courses[] Courses { get; set; }
}
public class Student
{
public string Id {get;set;}
public string Name{ get; set; }
}
public class Course
{
public string CourseId {get;set;}
public string CourseName{ get; set; }
}
我有一个返回列表的方法
public List<StudentInfo> FetchStudentInfo()
{
//bla bla
}
现在我想使用 csvHelper 在 csv 中导出列表
这是我的代码
List<StudentInfo> records = _service.FetchStudentInfo()
using (StreamWriter sw = new StreamWriter(memoryStream))
{
using (var csv = new CsvWriter(sw))
{
csv.WriteRecords(records);
sw.Flush();
}
}
但此代码仅导出到 csv 对象学生。 如何为每个学生导出到 csv 以使列表与同一行中的课程?
例如12 jim java c# python
如果我尝试
foreach(var item in records)
{
csvWriter.WriteRecords(item.Student);//I have compile error because it want to pass an IEnumerable
csvWriter.WriteRecords(item.Courses);
}
【问题讨论】:
-
CSV 文件存储数据行,每列用逗号分隔。因此它们只能代表一种实体类型。如果要嵌套类型(学生课程),则需要序列化为不同的格式。显而易见的选择是 JSON(Newtonsoft.Json 或 System.Text.Json)。
-
我建议使用 JSON 或 XML 进行序列化,因为两者都允许比 CSV 更复杂的结构。
标签: c# .net asp.net-web-api csvhelper