在CSVHelper中添加虚拟空字段

时间:2014-09-11 18:41:46

标签: c# .net csv export-to-csv csvhelper

我使用库CsvHelper来编写CSV。我有一个不包含所有记录的对象,我必须在我的CSV中添加空字段。例如:

public class Example
{
   public string Test1 { get; set; }
   public string Test2 { get; set; }
}

使用此地图:

public class ExampleMap : ClassMap<Example>
{
    public ExampleMap()
    {
      Map(ex=>ex.Test1).Index(0);
      Map(ex=>ex.Test2).Index(4);
    }
}

并且我想拥有这个对象

new Example() { Test1="dummy", Test2="field" };

这个csv结果:

dummy;;;field

如果有人可以帮助我,我真的很难解决这个问题:) 非常感谢

3 个答案:

答案 0 :(得分:0)

看起来违反之间显式列映射的概念。

似乎CsvHelper库不支持此类方案,因为{{3>}用于定义的列映射(&#34;映射列&#34;)。

但是,如果确实需要这样的输出,那么&#34;未使用&#34; (保留)列可以按如下方式介绍:

internal sealed class Example
{
    public string Test1 { get; set; }
    public string Test2 { get; set; }

    public string Reserved1 { get; set; }
    public string Reserved2 { get; set; }
}

internal sealed class ExampleMap : CsvClassMap<Example>
{
    public ExampleMap()
    {
        Map(ex => ex.Test1).Index(0);
        Map(ex => ex.Reserved1).Index(1);
        Map(ex => ex.Reserved2).Index(2);
        Map(ex => ex.Test2).Index(3);
    }
}

答案 1 :(得分:0)

我最终选择直接编辑每一行的最终csv字符串......它有效,但很难看!

答案 2 :(得分:0)

注意:在新版本中,Constant()运算符可能会取代它。

与API更加一致的方法可能是使用自定义ITypeConverter。这是我的用法:

Map(i => i.SomeUnusedId).Name("SomeId").TypeConverter<EmptyConverter>(); //converst to an empty string

然后转换器可能看起来像这样:

public class EmptyConverter : ITypeConverter {
    /// <inheritdoc />
    public bool CanConvertFrom(Type type) {
        return true;
    }

    /// <inheritdoc />
    public bool CanConvertTo(Type type) {
        return true;
    }

    /// <inheritdoc />
    public object ConvertFromString(TypeConverterOptions options, string text) {
        return string.Empty;
    }

    /// <inheritdoc />
    public string ConvertToString(TypeConverterOptions options, object value) {
        return string.Empty;
    }
}