2017-08-10 6 views
0

La fonction Invoke() sur un objet MethodInfo accepte les paramètres object[]. Je veux être en mesure d'envoyer une chaîne codée JSON à la place. Est-ce qu'il y a un moyen de faire ça?C# MethodInfo Invoke() avec les arguments JSON

Le code que je me fonde le mien de Provient de 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); 

Je suis conscient que Newtonsoft fournit un moyen de cordes désérialiser mais peut-il le faire dans un object[]? Ou est-ce qu'il y a un autre moyen de le faire?

Répondre

1

La signature de méthode que vous regardez prend un Object[] représentant tous les paramètres de votre méthode. Par exemple:

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

pourrait être appelé comme ceci:

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

Donc, dans votre cas, vous devriez être en mesure d'appeler Invoke en utilisant:

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

MethodInfo MSDN Link

+0

Theres quelque chose au sujet 'new [] {...}' cela ne semble pas bien se passer. Même si les champs json correspondent directement aux noms des paramètres, ils donnent une erreur en disant "paramètres incompatibles" ou quelque chose comme ça. Heureusement, il existe un moyen de mapper ces noms de paramètres selon [ici] (https://stackoverflow.com/questions/13071805/dynamic-invoke-of-a-method-using-named-parameters) – Notaras

+0

Ouais désolé, je le tapait en utilisant des tableaux implicitement typés. Si vous spécifiez un nouvel objet [], cela devrait faire l'affaire. Réponse mise à jour –