Imagine I have a class like this
public class DataGroup
{
public string DataA { get; set; }
public string DataB { get; set; }
public bool Updated { get; set; }
}
I need to write an empty string or "N/A" for DataA and DataB when Updated == false, and the actual value when Updated == true;
Is this possible with CsvHelper?
Type conversion does not seem to work as it only access the final member so it is not able to read the value of Updated.
There is a Conversion method for the MapMember class but it seems to only work for reading.
You can use the Convert method. This method can be a little confusing because it can either ConvertFromString or ConvertToString, depending on how you use it.
ConvertFromString Use Row with CsvReader
Map(m => m.DataA).Convert(m => m.Row.GetField("DataA") + m.Row.GetField("Updated"));
ConvertToString Use Value with CsvWriter
Map(m => m.DataA).Convert(m => m.Value.DataA + m.Value.Updated);
You want ConvertToString, so your ClassMap could be something like this.
public class DataGroupMap : ClassMap<DataGroup>
{
public DataGroupMap()
{
Map(m => m.DataA).Convert(m =>
{
if (m.Value.Updated) { return m.Value.DataA; }
return "N/A";
});
Map(m => m.DataB).Convert(m =>
{
if (m.Value.Updated) { return m.Value.DataB; }
return "N/A";
});
Map(m => m.Updated);
}
}
if(Updated == false)
{
DataA = "N/A";
DataB = "N/A";
}
else
{
DataA = "Actual Information";
DataB = "Actual Information";
}
Instead of "N/A" you can set the type to null