I have this simple class
public class Data
{
public int Id { get; set; }
public string Name { get; set; }
// public string? OriginalRecord { get; set; }
}
This is my data file:
32,Foo
45,Bar
Reading is done like this
using (var reader = new StreamReader("file.csv"))
using (var csv = new CsvReader(streamReader, new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = false }))
{
var records = csv.GetRecords<Data>();
}
Now, my question is this: is there anyway that I can populate the OriginalRecord
property with data used to create the record (32,Foo
for the first record, and 45,Bar
for the second record)?
You can use Convert
in a ClassMap
to get the RawRecord
value.
void Main()
{
using (var reader = new StringReader("32,Foo\n45,Bar"))
using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = false }))
{
csv.Context.RegisterClassMap<DataMap>();
var records = csv.GetRecords<Data>().Dump();
}
}
public sealed class DataMap : ClassMap<Data>
{
public DataMap()
{
Map(x => x.Id).Index(0);
Map(x => x.Name).Index(1);
Map(x => x.OriginalRecord).Convert(args => args.Row.Parser.RawRecord);
}
}
public class Data
{
public int Id { get; set; }
public string Name { get; set; }
public string? OriginalRecord { get; set; }
}