2015-08-25 403 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