Ejemplo n.º 1
0
        /// <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);
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }