我已经创建了一个使用反射来设置csv文件中的属性值的modelbinder。从文件解析的所有值都是字符串。我使用的Convert.ChangeType
在大多数情况下都可以转换为相关类型,即int,long等。但是现在需要将日期的值“ 20180227”解析为我的DateTime
属性。 csv中的格式为yyyyMMdd。到目前为止,我拥有的代码:
foreach (var property in matchedModel)
{
Type propType = Nullable.GetUnderlyingType(property.Value.PropertyType) ??
property.Value.PropertyType;
var value = string.IsNullOrEmpty(data.Value[property.Key]) ? null :
Convert.ChangeType(data.Value[property.Key], propType);
property.Value.SetValue(instance, value, null);
}
data.Value[property.Key]
是保存我分析的字符串的地方。
property
变量是需要设置的相关属性。由于我具有一些可为空的属性,因此必须使用Nullable.GetUnderlyingType
。
问题在于Convert.ChangeType
无法推断如何将我的日期格式正确地更改为DateTime对象。我能做的是这样的:
if(property is datetime) do value conversion
但是,这太硬了,我想要更通用/更动态的东西。最好的方法是什么?