简体   繁体   English

在C#Convert.ChangeType(jobj [p.Name] .ToString(),p.ParameterType)中

[英]In C# Convert.ChangeType(jobj[p.Name].ToString(), p.ParameterType))

Code for execute service dynamically in C# which has JSON object 在具有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);

I have services which have following 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
}

For 1st( InfoEdit service) request parameters, I got an error "Invalid cast from 'System.String' to 'DataClass.InfoEditResponse'" , while for 2nd( Login service) request parameters my service called without any hassle. 对于第一个( InfoEdit服务)请求参数,我收到了一个错误消息“从'System.String'到'DataClass.InfoEditResponse'的无效转换” ,而对于第二个( 登录服务)请求参数,我的服务调用没有任何麻烦。

If anyone have idea about it then please suggest. 如果有人对此有想法,请提出建议。

Thank You in advance :) 先感谢您 :)

All you need is to use the ToObject method of JObject 所有你需要的是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM