【问题标题】:Save object list to csv c# asp.net将对象列表保存到 csv c# asp.net
【发布时间】: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 我不同意,见下文。
  • @OleEHDufour,真的吗?在您的 sn-p 中,您必须分别指定每一列,如果您添加一个属性,您还必须手动更改 string line = 。那么错误处理和转义字符呢?测试了您的 sn-p,如果字符串中包含 ",它会生成不正确的 csv。

标签: c# asp.net


【解决方案1】:

这里是我提到的库的 sn-p。只需输入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();

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 2013-10-22
    • 2020-11-03
    • 1970-01-01
    • 2016-05-21
    • 2013-01-20
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多