繁体   English   中英

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

[英]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.

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