LinqToCSV 如何消除空字符串周围的引号

4
LinqToCSV 似乎在空字符串周围添加引号,是否有设置可以关闭此功能?文档中没有找到任何内容。也尝试发送 null 值而不是空字符串,但结果相同。
以下是使用 LinqToCSV 生成的样本 CSV 输出。第 5、6 和 7 列是空字符串,但最终 CSV 输出中它们变成了带引号的字符串。
这是参考代码样例。
CsvFileDescription fd = new CsvFileDescription();
fd.FirstLineHasColumnNames = false;
fd.QuoteAllFields = false;
fd.EnforceCsvColumnAttribute = true;            
fd.SeparatorChar = Globals.Separator[0];

CsvContext cc = new CsvContext();
cc.Write(data, txtFileName, fd);

所有数据的属性都是普通字符串。
例如,其中一个列被定义为:
[CsvColumn(FieldIndex = 16, CanBeNull = true)]
public string TimeStamp { get; set; }

最好添加一些示例数据和实际代码。 "似乎正在添加"似乎表明您自己不确定。此外,请指出您是否尝试过搜索文档? - Vikas Gupta
你最终解决了这个问题吗?我也需要解决它!谢谢。 - Sergio
1个回答

1
截至LinqToCsv v1.5,这种行为不可复现。当我将TimeStamp字段的值设置为null时,该值不会被引用。但是,String.Empty的值会被引用。
考虑以下内容:
void Main()
{
    var fd = new CsvFileDescription();
    fd.FirstLineHasColumnNames = false;
    fd.QuoteAllFields = false;
    fd.EnforceCsvColumnAttribute = true;
    fd.SeparatorChar = ',';

    var txtFileName = @"C:\temp\linqtocsv.csv";
    var data = new[] { new Data { TimeStamp = null, Foo = null, Bar = "" } };
    var cc = new CsvContext();
    cc.Write(data, txtFileName, fd);
}

class Data
{
    [CsvColumn(FieldIndex = 0, CanBeNull = true)]
    public string TimeStamp { get; set; }
    [CsvColumn(FieldIndex = 1, CanBeNull = true)]
    public string Foo { get; set; }
    [CsvColumn(FieldIndex = 2, CanBeNull = true)]
    public string Bar { get; set; }
}

输出的文件内容为:

文件的内容是:

,,""

你可以使用 LinqPad查询 自己尝试。

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