public void SetProperties(IPropertyProvider propertyValues, IFormatProvider provider) { var properties = _type.GetProperties(); foreach (var property in properties) { var value = propertyValues.Get <object>(property.Name); if (value != null) { // for array and list properties - split value on ';'s if (property.PropertyType.IsArray || (property.PropertyType.IsGenericType && property.PropertyType.GenericTypeArguments.Length == 1 && property.PropertyType == typeof(List <>).MakeGenericType(property.PropertyType.GenericTypeArguments))) { value = value.ToString().Split(';').ToList(); } value = UniversalConverter.ConvertToType(value, property.PropertyType, provider); property.SetValue(_targetObject, value, null); Trace.TraceInformation($"Set({_type.Name}) {property.Name} = {property.GetValue(_targetObject, null)}"); } } }