In C# Convert.ChangeType(jobj[p.Name].ToString(), p.Paramete
本文关键字:ToString Paramete Name Convert ChangeType jobj In | 更新日期: 2023-09-27 18:19:55
在具有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'的无效转换",而对于第二个(
Login服务)请求参数我的服务调用时没有遇到任何麻烦。
如果有人对此有想法,请提出建议。
提前感谢:)
您只需要使用JObject
的ToObject
方法
var parameters = mi.GetParameters()
.Select(p => jobj[p.Name].ToObject(p.ParameterType))
.ToArray();
object retval = mi.Invoke(instance, parameters);