Esempio n. 1
0
        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);
        }