private static bool IsNullableType(Type type)
{
return type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>));
}
private static void SetPropertyValueFromProperty(string location, object fromObject, PropertyInfo fromProperty, object toObject, PropertyInfo targetProperty)
{
if (fromProperty != null)
{
try
{
var propertyValue = fromProperty.GetValue(fromObject, null);
if (propertyValue != null)
{
// Cast type
if (propertyValue.GetType() != targetProperty.PropertyType)
{
var t = propertyValue.GetType();
var u = Nullable.GetUnderlyingType(t);
var targetType = IsNullableType(targetProperty.PropertyType) ? Nullable.GetUnderlyingType(targetProperty.PropertyType) : targetProperty.PropertyType;
if (propertyValue is IConvertible)
{
propertyValue = Convert.ChangeType(propertyValue, u ?? t);
try
{
if (targetType.IsEnum)
{
var enumTargetType = Enum.GetUnderlyingType(targetType);
propertyValue = TypeCast(propertyValue, enumTargetType);
//propertyValue = Convert.ChangeType(propertyValue, enumTargetType);
}
else
{
propertyValue = Convert.ChangeType(propertyValue, targetType);
}
}
catch (Exception ex)
{
// Ignore: Can not change type
LoggingHelper.Logger.Debug(ex.Message);
}
}
if (propertyValue.GetType() != targetType)
{
try
{
propertyValue = TypeCast(propertyValue, targetType);
}
catch (Exception ex)
{
// Ignore: Can cast type
LoggingHelper.Logger.Debug(ex.Message);
}
}
}
}
try
{
// Dit moet eigenlijk wel altijd goed gaan
targetProperty.SetValue(toObject, propertyValue, null);
}
catch (Exception ex)
{
LoggingHelper.Logger.Warn(ex.Message);
LoggingHelper.Logger.Warn($"{location}: Problem when setting field while using reflection {targetProperty.Name}");
}
}
catch (Exception ex)
{
// Hier kom je wanneer bepaalde velden niet meer bestaan
LoggingHelper.Logger.Warn(ex.Message);
LoggingHelper.Logger.Warn($"{location}: Problem with field value while using reflection {targetProperty.Name}");
}
}
else
{
LoggingHelper.Logger.Warn($"{location}: Field not found while using reflection {targetProperty.Name}");
}
}
public static void SetValue(object inputObject, string propertyName, object propertyVal)
{
//find out the type
Type type = inputObject.GetType();
//get the property information based on the type
System.Reflection.PropertyInfo propertyInfo = type.GetProperty(propertyName);
//find the property type
Type propertyType = propertyInfo.PropertyType;
//Convert.ChangeType does not handle conversion to nullable types
//if the property type is nullable, we need to get the underlying type of the property
var targetType = IsNullableType(propertyInfo.PropertyType) ? Nullable.GetUnderlyingType(propertyInfo.PropertyType) : propertyInfo.PropertyType;
//Returns an System.Object with the specified System.Type and whose value is
//equivalent to the specified object.
propertyVal = Convert.ChangeType(propertyVal, targetType);
//Set the value of the property
propertyInfo.SetValue(inputObject, propertyVal, null);
}
private static bool IsNullableType(Type type)
{
return type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>));
}
265800cookie-checkC# set nullable type properties