public static class TypeHelper { #region 将表单提交的数据封装到T中 /// <summary> /// 将表单提交的数据封装到T中 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="t">实体对象</param> /// <param name="collection"></param> public static void GetModelRequestFrom<T>(T t, NameValueCollection collection) { string name; var propertyArry = t.GetType().GetProperties(); foreach (var t1 in propertyArry) { name = t1.Name; var key = collection.AllKeys.FirstOrDefault(o => o.Equals(name, StringComparison.InvariantCultureIgnoreCase)); if (string.IsNullOrWhiteSpace(key)) break; var value = collection[key]; var propety = propertyArry.FirstOrDefault(a => a.Name.Equals(name, StringComparison.InvariantCulture)); if (propety != null) { propety.SetValue(t, value.FormatString(propety.PropertyType), null); } } } public static Object FormatString(this String str, Type type) { if (String.IsNullOrEmpty(str)) return null; if (type == null) return str; if (type.IsArray) { Type elementType = type.GetElementType(); String[] strs = str.Split(new char[] { ';' }); Array array = Array.CreateInstance(elementType, strs.Length); for (int i = 0, c = strs.Length; i < c; ++i) { array.SetValue(ConvertSimpleType(strs[i], elementType), i); } return array; } return ConvertSimpleType(str, type); } private static object ConvertSimpleType(object value, Type destinationType) { object returnValue; if ((value == null) || destinationType.IsInstanceOfType(value)) { return value; } string str = value as string; if ((str != null) && (str.Length == 0)) { return null; } TypeConverter converter = TypeDescriptor.GetConverter(destinationType); bool flag = converter.CanConvertFrom(value.GetType()); if (!flag) { converter = TypeDescriptor.GetConverter(value.GetType()); } if (!flag && !converter.CanConvertTo(destinationType)) { throw new InvalidOperationException("无法转换成类型:" + value.ToString() + "==>" + destinationType); } try { returnValue = flag ? converter.ConvertFrom(null, null, value) : converter.ConvertTo(null, null, value, destinationType); } catch (Exception e) { throw new InvalidOperationException("类型转换出错:" + value.ToString() + "==>" + destinationType, e); } return returnValue; } #endregion }