/// <summary> /// 更新对象中字段的值 /// </summary> /// <param name="obj">对象</param> /// <param name="fi">字段信息</param> /// <param name="value">值</param> /// <param name="actualType">值的类型,为空时自动判断</param> static void SetFieldValue(object obj, FieldInfo fi, string value, Type actualType = null) { if (fi == null) { return; } if (String.IsNullOrEmpty(value)) { return; } if (PraserDict.ContainsKey(fi.FieldType)) { var pvalue = PraserDict[fi.FieldType].Prase(value); if (pvalue == null) { return; } fi.SetValue(obj, pvalue); return; } if (fi.FieldType == typeof(string) || fi.FieldType == typeof(object)) //字段类型为String { fi.SetValue(obj, value); } else if (fi.FieldType == typeof(int) || fi.FieldType == typeof(Int64) || fi.FieldType == typeof(Int16)) { fi.SetValue(obj, CommOp.ToLong(value)); } else if (fi.FieldType == typeof(bool)) { fi.SetValue(obj, CommOp.ToBool(value)); } else if (fi.FieldType == typeof(double) || fi.FieldType == typeof(float)) { fi.SetValue(obj, CommOp.ToDouble(value)); } else if (fi.FieldType == typeof(decimal)) { fi.SetValue(obj, CommOp.ToDecimal(value)); } else if (fi.FieldType.IsEnum) { if (fi.FieldType.IsEnumDefined(value ?? "")) { fi.SetValue(obj, Enum.Parse(fi.FieldType, value)); } } else { actualType = actualType ?? fi.FieldType; var p = JsonHelper.FormJson(value, actualType) ?? Activator.CreateInstance(actualType); fi.SetValue(obj, p); } }
ChunkInfo GetBytesChunkInfo(string contentRange) { if (contentRange.IsEmpty()) { return(new ChunkInfo()); } Regex reg = new Regex(@"bytes (\d+)-(\d+)/(\d+)"); var match = reg.Match(contentRange); return(new ChunkInfo { Size = CommOp.ToLong(match.Groups[3].Value), Start = CommOp.ToLong(match.Groups[1].Value), End = CommOp.ToLong(match.Groups[2].Value), }); }
/// <summary> /// 返回对象值的格式 /// </summary> /// <param name="fFormat"></param> /// <param name="arg"></param> /// <param name="provider"></param> /// <returns></returns> public string Format(string fFormat, object arg, IFormatProvider provider) { long size = CommOp.ToLong(arg); return(new StorageSize(size).ToString()); }
/// <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; } } }