/// <summary> /// 根据HttpRequest填充一个数据实体。 /// 这里不支持嵌套类型的数据实体,且要求各数据成员都是简单的数据类型。 /// </summary> /// <param name="request"></param> /// <param name="model"></param> private static void FillModel(HttpRequest request, object model, ParameterDescriptor parameterDescriptor) { ModelDescriptor descripton = MetadataHelper.GetModelDescriptor(model.GetType()); var func = ParameterDescriptor.GetPropertyFilter(parameterDescriptor); object val = null; foreach (DataMember field in descripton.Fields) { if (field.Ignore) { continue; } if (!func(field.Name))//在参数上面标记了排除 { continue; } // 这里的实现方式不支持嵌套类型的数据实体。 // 如果有这方面的需求,可以将这里改成递归的嵌套调用。 val = GetValueByNameAndTypeFrommRequest(request, field.Type.GetRealType(), field.Name, parameterDescriptor.BindingInfo.Prefix); if (val != null) { field.SetValue(model, val); } } }
/// <summary> /// 过滤属性 /// </summary> /// <param name="val"></param> /// <param name="parameterDescriptor"></param> /// <returns></returns> private object PropertyFilter(object val, ParameterDescriptor parameterDescriptor) { IDictionary <string, object> dict = val as IDictionary <string, object>; if (dict == null) { return(val); } var filter = ParameterDescriptor.GetPropertyFilter(parameterDescriptor); foreach (var item in dict.Keys) { if (!filter(item)) { dict[item] = null; } } return(dict); }