2017-08-10 109 views
0

Invoke()功能MethodInfo對象接受參數爲object[]。我希望能夠發送一個JSON編碼的字符串。有沒有辦法做到這一點?C#MethodInfo具有JSON參數的調用()

對此我立足礦井來自this MSDN page

.... 
object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName); 
MethodInfo mi = wsvcClass.GetType().GetMethod(methodName); 

//args in this case is an object[]. any way to pass a string? 
return mi.Invoke(wsvcClass, args); 

我知道Newtonsoft提供了一種反序列化的字符串,但它可以這樣做,爲object[]的代碼?還是有另一種方法來做到這一點?

回答

1

您正在查看的方法簽名需要代表您的方法中的所有參數的Object[]。例如:

public void DoStuff(string x, string y, int b); 

可以這樣調用:

methodInfo.Invoke(wscvClass, new object[] { "x", "y string", 500 }); 

所以你的情況,你應該可以使用呼叫Invoke

string jsonEncodedString = "{ }"; // whatever you need to do to get this value 
mi.Invoke(wsvcClass, new object[] { jsonEncodedString }); 

MethodInfo MSDN Link

+0

有件事有關'新[] {...}'似乎並不好。即使json字段直接映射到參數名稱,它也會給出一個錯誤,說'不匹配的參數'或類似的東西。幸運的是,有一種方法可以按照[這裏]映射這些參數名稱(https://stackoverflow.com/questions/13071805/dynamic-invoke-of-a-method-using-named-parameters) – Notaras

+0

對不起,我使用隱式類型的數組鍵入它。如果你指定了新的對象[],那就應該這樣做。更新了答案 –