[英]In C# Convert.ChangeType(jobj[p.Name].ToString(), p.ParameterType))
在具有JSON对象的C#中动态执行服务的代码
var jobj = JObject.FromObject(JSON Object);
object instance= new RestServices();
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);
我的服务具有以下参数
1.InfoEdit service
{
"method": "InfoEdit",
"storeId":"1",
"personalInfo": {
"Gender":"test",
"FirstName": "test",
"CompanyName": "test",
"PhoneNumber":"1153646",
"NewsLetter":"1"
}
};
2.Login service
{
"method": "Login",
"apiSecretKey": "y109m113e122",
"userName": "test@test.com",
"password": "test",
"isGuestCustomerId": 1
}
对于第一个( InfoEdit服务)请求参数,我收到了一个错误消息“从'System.String'到'DataClass.InfoEditResponse'的无效转换” ,而对于第二个( 登录服务)请求参数,我的服务调用没有任何麻烦。
如果有人对此有想法,请提出建议。
先感谢您 :)
所有你需要的是使用ToObject
的方法JObject
var parameters = mi.GetParameters()
.Select(p => jobj[p.Name].ToObject(p.ParameterType))
.ToArray();
object retval = mi.Invoke(instance, parameters);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.