public void Search(HttpContext context) { // determino il tipo di oggetto passato string[] typeOf = context.Request["class"].ToString().Split('.'); Type modelType = GetObjectType(context, typeOf[typeOf.Length - 1]); // ricostruisco l'oggetto string data = context.Request["data"]; object modelInstance = Serializer.UnserializeObject(data, modelType, SerializationType.JSON); // ricavo il metodo MethodInfo method = modelType.GetMethod("Search"); // ricavo i parametri di ricerca da passare al metodo string searchdata = context.Request["searchdata"].ToString(); searchdata = searchdata.Replace("{", "").Replace("}", ""); Hashtable searchParameters = new Hashtable(); if (searchdata != "") { string[] searchDataList = searchdata.Split(','); string searchKey = ""; dynamic searchValue = ""; for (int i = 0; i < searchDataList.Length; i++) { searchKey = searchDataList[i].Split(':')[0].Replace("\"", ""); searchValue = searchDataList[i].Split(':')[1].Replace("\"", "").Replace("[", "").Replace("]", ""); if (searchValue == "null") { searchValue = null; } // converto il valore nel tipo definito nell'oggetto PropertyInfo property = modelType.GetProperty(searchKey); Type propertyType = property.PropertyType; switch (propertyType.ToString()) { case "System.Nullable`1[System.Int32]": searchValue = Marshaller.ChangeType <int?>(searchValue); break; case "System.Nullable`1[System.Double]": searchValue = Marshaller.ChangeType <double?>(searchValue); break; case "System.Nullable`1[System.Boolean]": searchValue = Marshaller.ChangeType <bool?>(searchValue); break; case "System.Nullable`1[System.DateTime]": searchValue = Marshaller.ChangeType <DateTime?>(searchValue); break; default: searchValue = Marshaller.ChangeType <string>(searchValue); break; } searchParameters.Add(searchKey, searchValue); } } // invoco il metodo object[] args = { searchParameters }; List <dynamic> modelList = (List <dynamic>)method.Invoke(modelInstance, args); // restituisco al client l'oggetto string output = (modelList != null && modelList.Count > 0) ? Serializer.SerializeObjectList(modelList, SerializationType.JSON) : "{}"; context.Response.Write(output); }