通过反射将解析后的字符串从csv转换为datetime属性

时间:2018-12-21 10:56:12

标签: c# datetime reflection type-conversion

我已经创建了一个使用反射来设置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

但是,这太硬了,我想要更通用/更动态的东西。最好的方法是什么?

0 个答案:

没有答案