【发布时间】:2018-03-10 10:06:46
【问题描述】:
我想从对象列表中将 csv 文件返回到网站。
该过程从从数据库中检索 json 数据开始,将其转换为对象列表并将其打印到 csv 文件中。 我目前不知道应该如何返回文件,目前我将它保存到我自己的硬盘中(只是为了确保它按我想要的方式工作)。
编写 csv 的函数的类:
public void WriteCSV<T>(IEnumerable<T> items, string path)
{
Type itemType = typeof(T);
var props = itemType.GetProperties(BindingFlags.Public |
BindingFlags.Instance)
.OrderBy(p => p.Name);
using (var writer = new StreamWriter(path))
{
writer.WriteLine("sep=,");
writer.WriteLine(string.Join(", ", props.Select(p => p.Name)));
foreach (var item in items)
{
writer.WriteLine(string.Join(", ", props.Select(p =>
p.GetValue(item, null))));
}
}
}
调用方法并将文件运行到用户的类:
public List<jsonObj> dataList = new List<jsonObj>();
[HttpGet]
[Route("api/csv/{id}")]
public IActionResult getCsv(int id)
{
var client = new HttpClient();
var json = client.GetStringAsync("http://localhost:52716/api/csv/data/" + id).Result;
dataList = JsonConvert.DeserializeObject<List<jsonObj>>(json);
WriteCSV(dataList, @"C:\Users\****\Desktop\min.csv");
return Ok();
//return File(csv, "text /csv", "results.csv");
}
【问题讨论】:
-
您可能希望使用专门的库来创建 CSV:joshclose.github.io/CsvHelper
-
@VDWWD 我试过了,但它让我更加困惑。
-
@VDWWD 我不同意,见下文。
-
asp.net 核心见stackoverflow.com/questions/47423563/…
-
@OleEHDufour,真的吗?在您的 sn-p 中,您必须分别指定每一列,如果您添加一个属性,您还必须手动更改
string line =。那么错误处理和转义字符呢?测试了您的 sn-p,如果字符串中包含",它会生成不正确的 csv。