/// <summary> /// 将value中的值赋给对象的属性或字段 /// </summary> /// <param name="obj">对象</param> /// <param name="propName">属性名</param> /// <param name="value">值</param> /// <param name="actualType">值的类型,为空时自动判断</param> public static void SetValue(object obj, string propName, string value, Type actualType = null) { //if (String.IsNullOrEmpty(value)) return; FieldInfo fi = obj.GetType().GetField(propName, bindAttr); if (fi != null) { SetFieldValue(obj, fi, value, actualType); return; } PropertyInfo pi = GetPropertyInfo(obj, propName); if (pi == null) { return; } if (!pi.CanWrite) { return; } if (PraserDict.ContainsKey(pi.PropertyType)) { var pvalue = PraserDict[pi.PropertyType].Prase(value); if (pvalue == null) { return; } pi.SetValue(obj, pvalue, null); return; } if (pi.PropertyType == typeof(string) || pi.PropertyType == typeof(object)) { pi.SetValue(obj, value, null); } else if (pi.PropertyType == typeof(int)) { pi.SetValue(obj, CommOp.ToInt(value), null); } else if (pi.PropertyType == typeof(Int64)) { pi.SetValue(obj, CommOp.ToLong(value), null); } else if (pi.PropertyType == typeof(Int16)) { pi.SetValue(obj, (short)CommOp.ToInt(value), null); } else if (pi.PropertyType == typeof(int?)) { pi.SetValue(obj, CommOp.ToIntNull(value), null); } else if (pi.PropertyType == typeof(bool)) { pi.SetValue(obj, CommOp.ToBool(value), null); } else if (pi.PropertyType == typeof(bool?)) { pi.SetValue(obj, CommOp.ToBoolNull(value), null); } else if (pi.PropertyType == typeof(char)) { pi.SetValue(obj, CommOp.ToChar(value), null); } else if (pi.PropertyType == typeof(double) || pi.PropertyType == typeof(float)) { pi.SetValue(obj, CommOp.ToDouble(value), null); } else if (pi.PropertyType == typeof(decimal)) { pi.SetValue(obj, CommOp.ToDecimal(value), null); } else if (pi.PropertyType.IsEnum) { if (CommOp.IsNumeric(value)) { var val = CommOp.ToInt(value); if (pi.PropertyType.IsEnumDefined(val)) { pi.SetValue(obj, Enum.Parse(pi.PropertyType, val.ToString()), null); } } else { var val = CommOp.ToStr(value); if (pi.PropertyType.IsEnumDefined(val)) { pi.SetValue(obj, Enum.Parse(pi.PropertyType, val), null); } } } else if (pi.PropertyType == typeof(DateTime)) { DateTime dt = CommOp.ToDateTime(value); if (dt == default(DateTime)) { return; } pi.SetValue(obj, dt, null); } else if (pi.PropertyType == typeof(DateTime?)) { DateTime?dt = CommOp.ToDateTimeNull(value); pi.SetValue(obj, dt, null); } else { actualType = actualType ?? pi.PropertyType; var p = JsonHelper.FormJson(value, actualType) ?? Activator.CreateInstance(actualType); try { pi.SetValue(obj, p, null); } catch { throw; } } }