I'm using the CsvHelper library by Josh Close.
I'd like to configure the CsvReader to convert empty fields to null rather than an empty string, with the intent of storing these values in a database.
Notably, I am not mapping to a class but am reading in fields manually.
Attempts:
- I tried setting CsvConfiguration.UseNewObjectForNullReferenceMembers to false (it defaults to true), thinking perhaps that meant it wouldn't create a "new string object" when it found a null field.
- I tried adding a custom type converter that extended TypeConversion.StringConverter and overrode the ConvertFromString method.
- I tried adding an empty string to CsvConfiguration.TypeConverterOptions.getOptions.NullValues.
CsvConfiguration csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture);
//csvConfiguration.UseNewObjectForNullReferenceMembers = false;
//csvConfiguration.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("");
//csvConfiguration.TypeConverterCache.AddConverter<string>(new NullStringConverter());
using (StreamReader streamReader = new StreamReader(fileStream))
using (CsvReader csv = new CsvReader(streamReader, csvConfiguration))
{
string value = csv.GetField(index); // <-- I want this to be null not ""
}
public class NullStringConverter : StringConverter
{
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if (string.IsNullOrEmpty(text))
{
return null;
}
else
{
return base.ConvertFromString(text, row, memberMapData);
}
}
}