我想从对象列表中将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");
}
答案 0 :(得分:2)
这是我提到的图书馆的片段。只需输入MyList
作为包含对象的列表,即可完成。一旦你有一个字节数组,你可以将它发送到浏览器,将其存储在数据库等。
using CsvHelper;
byte[] bin;
using (MemoryStream stream = new MemoryStream())
using (TextWriter textWriter = new StreamWriter(stream))
using (CsvWriter csv = new CsvWriter(textWriter))
{
csv.Configuration.QuoteAllFields = true;
csv.Configuration.TrimHeaders = true;
csv.Configuration.TrimFields = true;
csv.WriteRecords(MyList);
bin = stream.ToArray();
}
Response.ClearHeaders();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "text/csv; charset=utf-8";
Response.AppendHeader("Content-disposition", string.Format("attachment; filename=\"{0}\"", "MyFile.csv"));
Response.AppendHeader("Content-Length", bin.Length.ToString());
Response.BinaryWrite(bin);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();