2015-08-25 289 views
0

动态方法我有JSON请求参数呼叫在C#

 
{ 
    "exp": 0, 
    "iat": 0, 
    "method": "Login", 
    "apiSecretKey": "y109m113e122", 
    "userName": "[email protected]", 
    "password": "test", 
    "isGuestCustomerId": 1 
} 

和方法在WCF REST API服务(C#)

 
Login(string apiSecretKey, string userName, string password, int isGuestCustomerId) 

我将如何通过这些请求参数登录方法?

注:我有大约200方法,以这种方式与不同的参数来调用等预先

 
Register(string apiSecretKey, string emailId, string password, string firstName, string lastName, string phoneNumber, string gender, string dateOfBirth, string companyName) 
and so on different methods 

感谢。

+0

您需要[思考](https://msdn.microsoft.com/en-US/library/ms173183.aspx),它的地段。 – nvoigt

回答

1

使用Json.Net,

var jobj = JObject.Parse(json); 
object instance = .... ; //Instance of your class containing methods.. 

var mi = instance.GetType().GetMethod(jobj["method"].ToString(), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
var parameters = mi.GetParameters() 
       .Select(p => Convert.ChangeType(jobj[p.Name].ToString(), p.ParameterType)) 
       .ToArray(); 

object retval = mi.Invoke(instance, parameters); 
+0

谢谢你的工作:) – Hrdk

+0

你可以请告知我为什么我得到错误,当我通过第二个请求参数InfoEdit使用你的方式调用不同的方法。请参考更新的问题。我得到错误“从'System.String'无效转换为'DataClass.InfoEditResponse'。”,如果我从代码“jobj [p.Name] .ToString(),p.ParameterType”中删除.ToString,那么我得到错误“对象必须实现IConvertible。” – Hrdk

+0

@Hrdk 2个月后请不要编辑您的问题以提出新问题。相反,问一个新的问题,确切的定义你的问题。我回滚你的编辑... – Eser