2017-08-10 28 views
0

MethodInfoオブジェクトのInvoke()関数は、object[]というパラメータを受け入れます。代わりにJSONエンコードされた文字列を送信できるようにしたいと思います。これを行う方法はありますか?JSON引数を持つMethodInfo Invoke()JSON引数を持つ

私は鉱山を基づかていたコードは、私がNewtonsoftは、文字列をデシリアライズする方法を提供しますが、それはobject[]にそうすることができることを承知しています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); 

から来ていますか?またはこれを行う別の方法がありますか?

答えて

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

約何かをtheresの'新しい[] {...}'それはうまく座っていないようです。 jsonフィールドはパラメータ名に直接マップされていますが、 'mismatched parameters'などのエラーが表示されます。幸運にも、[ここ](https://stackoverflow.com/questions/13071805/dynamic-invoke-of-a-method-using-named-parameters)に従ってこれらのパラメータ名をマップする方法があります – Notaras

+0

うん、私は暗黙的に型付けされた配列を使ってそれをタイプしていました。トリックを行うべき新しいオブジェクト[]を指定した場合。更新された答え –

関連する問題