У нас есть фиксированный формат выходной записи, где все поля разделены каналом.Макет является фиксированным, но обязательные поля расположены не по порядку (и это нельзя изменить, поскольку клиенты используют существующий макет).Можем ли мы использовать CSVHelper и атрибут Index для записи пустых полей, например, [Index (1)], [Index (4)], [Index (7)] даст что-то вроде:
"Field1Value,,,Field2Value,,,Field3Value"?
Мыможет в конечном итоге добавить пропущенные поля, но придется учитывать это поэтапно (из-за последствий для клиента), но мы хотим иметь возможность создать минимальный формат выходной записи с необходимыми значениями полей.
Мыработа с .Net Core 2.2 / C # для наших усилий.
Я просмотрел несколько библиотек nuget и других библиотек, которые поддерживают декорирование свойств с помощью атрибутов данных, таких как [Column (xx)] и [FieldOrder (xx)], но остановились.на 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