我使用库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
如果有人可以帮助我,我真的很难解决这个问题:) 非常感谢
答案 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;
}
}