Проблема в том, что T
, который вы передаете методу TestParse
, - это не тип bool, а тип класса, который вы хотите создать.Если вы измените строку на
public static bool TestParse(this string value)
{
return (bool)TypeDescriptor.GetConverter(typeof(bool)).ConvertFromString(value);
}
, это работает для случая bool, но, очевидно, не для других случаев.Вам необходимо получить тип свойства, которое вы хотите установить с помощью отражения, и передать его методу TestParse
.
public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
Type type = typeof(T);
T ret = new T();
foreach (var keyValue in source)
{
var propertyInfo = type.GetProperty(keyValue.Key);
propertyInfo.SetValue(ret, keyValue.Value.ToString().TestParse(propertyInfo.PropertyType), null);
}
return ret;
}
public static object TestParse(this string value, Type type)
{
return TypeDescriptor.GetConverter(type).ConvertFromString(value);
}
Я бы также изменил метод TestParse
с метода расширения на обычныйметод, потому что он чувствует себя немного странно