If you are using something larger than the base types (which Convert.ChangeTypehandles pretty nicely), the preferred way to do this is through TypeConverter:
var converter = TypeDescriptor.GetConverter(type);
object val = converter.ConvertFromString(s);
, ( ), ( [TypeConverter(...)]), (TypeDescriptor.AddAttributes(...)).