CsvHelper
CsvHelper copied to clipboard
Pass expected (target) variable type to ITypeConverter.ConvertFromString()
Is your feature request related to a problem? Please describe. I want to implement global enum to number converter. I want to add this converter only once to Context.TypeConverterCache so i dont have to set it to every enum in all of my models/mappings.
Here is code that i currently have and i was expecting to work:
public class NumberEnumConverter : ITypeConverter
{
public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return Convert.ChangeType(value, Type.GetTypeCode(memberMapData.Type)).ToString();
}
public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return Enum.Parse(memberMapData.Type, text);
}
}
Unfortunatelly ConvertFromString() function dont get target type (memberMapData.Type is value type = string). From what i checked right now default enum converter get it into constructor but i cant to the same for custom one.
Describe the solution you'd like Receiving target type inside ConvertFromString() (or any other way)
Describe alternatives you've considered My current alternative is code below, but with it I have to set it for every enum i have (cant be global).
public class NumberEnumConverter<T> : ITypeConverter
{
public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return Convert.ChangeType(value, Type.GetTypeCode(typeof(T))).ToString();
}
public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return Enum.Parse(typeof(T), text);
}
}
Additional context