我们有一个固定的输出记录格式,其中所有字段都由管道符分隔。布局是固定的,但所需字段不按顺序排列(这不能更改,因为客户正在使用现有布局)。我们能否使用CSVHelper和Index属性来写出空字段,例如[Index(1)],[Index(4)],[Index(7)]将产生类似以下内容的结果:
"Field1Value,,,Field2Value,,,Field3Value"?
我们可能会逐步添加缺失的字段(由于客户的影响,需要逐步考虑),但希望能够创建具有所需字段值的最小输出记录格式。
我们正在使用 .Net Core 2.2/C# 进行开发。
我查看了几个支持使用数据属性(如 [Column(xx)] 和 [FieldOrder(xx)])装饰属性的 nuget 和其他库,但最终选择了 CSVHelper,因为它似乎非常强大且被广泛使用。
public class Person
{
[Index(1)]
public string Name { get; set; }
[Index(4)]
public short Age { get; set; }
[Index(7)]
public string StreetAddress { get; set; }
}
static void Main(string[] args)
{
var records = new List<Person>
{
new Person { Name = "Jon Doe", Age = 100, StreetAddress = "123 Market Place" }
};
using (var writer = new StreamWriter("C:\\Projects\\CsvHelperDemo\\file.csv"))
using (var csv = new CsvWriter(writer))
{
csv.WriteRecords(records);
}
}
期望的结果:
Name,,,Age,,,StreetAddress
Jon Doe,,,100,,,123 Market Place
实际情况:
Name,Age,StreetAddress
Jon Doe,100,123 Market Place