CsvHelper将所有值用引号包裹起来

23

我正在使用CsvHelper,需要为所有值添加引号。这是可能的吗?

Data是一个List。

 using (StreamWriter textWriter = new StreamWriter(path))
 {
     textWriter.BaseStream.Write(p, 0, p.Length);
     // var dt = new DataTable();
     var csv = new CsvWriter(textWriter);
     csv.WriteRecords(Data);
     textWriter.Flush();
     textWriter.Close();
 }

谢谢

3个回答

31

有一个名为ShouldQuote的配置值,您可以在字段级别上确定是否应将其引用。

void Main()
{
    var records = new List<Foo>
    {
        new Foo { Id = 1, Name = "one" },
        new Foo { Id = 2, Name = "two" },
    };

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer))
    {
        csv.Configuration.ShouldQuote = (field, context) => true;
        csv.WriteRecords(records);

        writer.ToString().Dump();
    }
}

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

输出:

"Id","Name"
"1","one"
"2","two"

谢谢!它能与您的工具中的CsvReader一起使用吗? - Stu_Dent
@Stu_Dent 不确定你的意思是什么。 - Josh Close
这似乎已经过时了。请使用@Nahue Gonzalez的答案。 - gtu

13

从版本25.0.0到现在,做法是:

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    ShouldQuote = args => true
};

2
只需要添加一个配置对象,如下所示:
CsvHelper.Configuration.CsvConfiguration config = new CsvHelper.Configuration.CsvConfiguration();
               config.QuoteAllFields = true;
                var csv = new CsvWriter(textWriter, config);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接