CsvHelper:将空字符串写为特殊字符串

时间:2018-03-01 11:49:53

标签: c# csvhelper

我试图将CsvWriter配置为使用特殊字符串&#34; #NULL#&#34;可以为空的字符串属性。对于读者来说,通过设置csvReader.Configuration.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("#NULL#");它可以工作 - 它读取&#34; #NULL#&#34; csv中的字段为空字符串。

我用于编写器的代码如下,但它忽略了添加的NullValues并输出空字符串(默认行为)。 是否有编写器的其他配置参数?感谢。

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

    [Test]
    public void csv_write_test()
    {
        var entities = new[] {new Entity {Id = 1, Name = null}, new Entity {Id=2, Name = "SampleName"} };

        var fileName = "C:/Temp/tr/recordings/withNulls/sample-test.csv";
        File.Delete(fileName);

        using (var textWriter = new StreamWriter(fileName))
        {
            var csvWriter = new CsvWriter(textWriter);

            csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("#NULL#");

            csvWriter.WriteRecords(entities);
        }
    }

1 个答案:

答案 0 :(得分:2)

您可以使用自定义void Main() { using (var stream = new MemoryStream()) using (var writer = new StreamWriter(stream)) using (var reader = new StreamReader(stream)) using (var csv = new CsvWriter(writer)) { var records = new List<Test> { new Test { Id = 1, Name = "one" }, new Test { Id = 2, Name = null }, }; csv.Configuration.RegisterClassMap<TestMap>(); csv.WriteRecords(records); writer.Flush(); stream.Position = 0; reader.ReadToEnd().Dump(); } } public class Test { public int Id { get; set; } public string Name { get; set; } } public sealed class TestMap : ClassMap<Test> { public TestMap() { Map(m => m.Id); Map(m => m.Name).TypeConverter<CustomNullTypeConverter<string>>(); } } public class CustomNullTypeConverter<T> : DefaultTypeConverter { public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData) { if (value == null) { return "#NULL#"; } var converter = row.Configuration.TypeConverterCache.GetConverter<T>(); return converter.ConvertToString(value, row, memberMapData); } } 来完成此操作。

NullValues

如果您希望它使用{{1}}选项中的第一个值,则您需要提交功能请求。