Вот фрагмент кода, который я использую, чтобы сделать именно то, что вы пытаетесь сделать; конвертировать типы из БД. Обычно вы можете использовать Convert.ChangeType
, но это не работает с обнуляемыми типами, поэтому этот метод обрабатывает этот случай.
/// <summary>
/// This wrapper around Convert.ChangeType was done to handle nullable types.
/// See original authors work here: http://aspalliance.com/852
/// </summary>
/// <param name="value">The value to convert.</param>
/// <param name="conversionType">The type to convert to.</param>
/// <returns></returns>
public static object ChangeType(object value, Type conversionType)
{
if (conversionType == null)
{
throw new ArgumentNullException("conversionType");
}
if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
{
return null;
}
NullableConverter nullableConverter = new NullableConverter(conversionType);
conversionType = nullableConverter.UnderlyingType;
}
return Convert.ChangeType(value, conversionType);
}
Затем вы бы использовали его как:
foreach (PropertyInfo pi in zAccount)
{
object o = ChangeType(row[pi.Name], pi.GetType());
pi.SetValue(a, o, null);
}
Edit:
Собственно, перечитав ваше сообщение, ваше сообщение об ошибке
Объект типа 'System.String' нельзя преобразовать в тип 'System.Nullable`1 [System.Boolean]'.
делает его похожим на тип, который вы получили из базы данных, является string
, но свойство имеет тип bool?
(обнуляемое логическое значение), поэтому оно не может преобразовать его.