/// <summary> /// 参数解析 /// </summary> /// <param name="paramters"></param> /// <param name="nvs"></param> /// <returns></returns> public static object[] Convert(ParameterInfo[] paramters, NameValueCollection nvs) { List <object> args = new List <object>(); var obj = ConvertJsonObject(nvs); foreach (ParameterInfo info in paramters) { var type = GetElementType(info.ParameterType); var property = obj.Properties().SingleOrDefault(p => string.Compare(p.Name, info.Name, true) == 0); if (property != null) { try { //获取Json值 var jsonValue = CoreHelper.ConvertJsonValue(type, property.Value.ToString(Formatting.None)); args.Add(jsonValue); } catch (Exception ex) { throw new RESTfulException((int)HttpStatusCode.BadRequest, string.Format("Parameter [{0}] did not match type [{1}].", info.Name, CoreHelper.GetTypeName(type))); } } else { throw new RESTfulException((int)HttpStatusCode.BadRequest, "Parameter [" + info.Name + "] is not found."); } } return(args.ToArray()); }
/// <summary> /// 创建一个ParameterCollection /// </summary> /// <param name="method"></param> /// <param name="jsonString"></param> /// <returns></returns> public static ParameterCollection CreateParameters(System.Reflection.MethodInfo method, string jsonString) { if (!string.IsNullOrEmpty(jsonString)) { JObject obj = JObject.Parse(jsonString); if (obj.Count > 0) { var pis = method.GetParameters(); object[] parameters = new object[pis.Length]; var index = 0; foreach (var p in pis) { var property = obj.Properties().SingleOrDefault(o => string.Compare(o.Name, p.Name, true) == 0); if (property != null) { //获取Json值 string value = property.Value.ToString(Newtonsoft.Json.Formatting.None); object jsonValue = CoreHelper.ConvertJsonValue(p.ParameterType, value); parameters[index] = jsonValue; } index++; } //创建参数集合 return(CreateParameters(method, parameters)); } } //如果json检测不通过,返回空的参数集合 return(new ParameterCollection()); }