【问题标题】:Call dynamic method in c#在c#中调用动态方法
【发布时间】:2015-11-18 18:03:16
【问题描述】:

我有json请求参数

{ “经验”:0, “iat”:0, “方法”:“登录”, "apiSecretKey": "y109m113e122", "用户名": "test@test.com", “密码”:“测试”, “isGuestCustomerId”:1 }

并且方法在 WCF rest api 服务中(C#)

登录(字符串 apiSecretKey,字符串用户名,字符串密码,int isGuestCustomerId)

我如何将这些请求参数传递给登录方法?

注意:我有大约 200 种方法可以使用不同的参数以这种方式调用,例如

Register(string apiSecretKey, string emailId, string password, string firstName, string lastName, string phoneNumber, string gender, string dateOfBirth, string companyName) 等等不同的方法

提前致谢。

【问题讨论】:

标签: c# json string wcf


【解决方案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);

【讨论】:

  • 您能否告知为什么我使用您调用不同方法的方式将第二个请求参数传递给 InfoEdit 时出现错误。请参阅更新的问题。我收到错误“从'System.String'到'DataClass.InfoEditResponse'的无效转换。”如果我从代码“jobj[p.Name].ToString(), p.ParameterType”中删除.ToString,那么我得到了错误“对象必须实现 IConvertible。”
  • @Hrdk 请不要在 2 个月后编辑您的问题以提出新问题。相反,提出一个新问题,并准确定义您的问题。我回滚了你的编辑...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多