public static object Bind(Type obj, NameValueCollection values, CultureInfo culture) { object component = obj.GetConstructor(new Type[0]).Invoke(new object[0]); PropertyDescriptorCollection properties = new HyperTypeDescriptionProvider(obj).GetTypeDescriptor(obj).GetProperties(); foreach (string allKey in values.AllKeys) { PropertyDescriptor propertyDescriptor = properties.Find(allKey, true); if (propertyDescriptor != null && !propertyDescriptor.IsReadOnly) { if (propertyDescriptor.Converter.CanConvertFrom(typeof(string))) { try { int result; if (allKey != "id" || allKey == "id" && int.TryParse(values[allKey], out result)) { propertyDescriptor.SetValue(component, propertyDescriptor.Converter.ConvertFrom((ITypeDescriptorContext)null, culture, (object)values[allKey])); } else { propertyDescriptor.SetValue(component, propertyDescriptor.ComponentType.IsValueType ? Activator.CreateInstance(propertyDescriptor.ComponentType) : (object)(obj = (Type)null)); } } catch { } } } } return(component); }