如何将对象列表转换为csv?

leo*_*ora 18 c# linq csv generics list

如果我有一个名为"Car"的对象列表:

public class Car
{
     public string Name;
     public int Year;
     public string Model;
}
Run Code Online (Sandbox Code Playgroud)

如何将对象列表转换为例如List <Car>到csv?

Ser*_*oda 14

  1. FileHelpers
  2. 文字OleDb提供者
  3. 根据RFC-4180手动进行字符串连接
  4. 第三方库,例如Aspose.Cells可以在没有任何摩擦的情况下完成.它非常快.


Vla*_*lad 9

将以下方法添加到Car:

String Escape(String s)
{
    StringBuilder sb = new StringBuilder();
    bool needQuotes = false;
    foreach (char c in s.ToArray())
    {
        switch (c)
        {
            case '"': sb.Append("\\\""); needQuotes = true; break;
            case ' ': sb.Append(" "); needQuotes = true; break;
            case ',': sb.Append(","); needQuotes = true; break;
            case '\t': sb.Append("\\t"); needQuotes = true; break;
            case '\n': sb.Append("\\n"); needQuotes = true; break;
            default: sb.Append(c); break;
        }
    }
    if (needQuotes)
        return "\"" + sb.ToString() + "\"";
    else
        return sb.ToString();
}

public void SerializeAsCsv(Stream stream)
{
    stream.Write(Escape(Name));
    stream.Write(",");
    stream.Write(Year.ToString());
    stream.Write(",");
    stream.Write(Escape(Model));
    stream.Write("\n");
}
Run Code Online (Sandbox Code Playgroud)

现在您可以序列化整个列表:

foreach (Car car in list)
{
    car.SerializeAsCsv(stream);
}
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 8

查看FileHelpers库.

从网站:

The FileHelpers are a free and easy to use .NET library to import/export data from fixed length or delimited records in files, strings or streams.

根据RFC-4180,这将确保线路终止,转义等各种问题得到正确处理.