En supposant que vous connaissez le type, ont une instance de celui-ci, et que la méthode est en fait publique:
string methodName = parent.Element("METHOD").Value;
MethodInfo method = type.GetMethod(methodName);
object[] arguments = (from p in method.GetParameters()
let arg = element.Element(p.Name)
where arg != null
select (object) arg.Value).ToArray();
// We ignore extra parameters in the XML, but we need all the right
// ones from the method
if (arguments.Length != method.GetParameters().Length)
{
throw new ArgumentException("Parameters didn't match");
}
method.Invoke(instance, arguments);
Notez que je fais nom sensible à la casse correspondant ici, qui ne fonctionne pas avec votre échantillon. Si vous voulez être insensible à la casse, c'est un peu plus difficile, mais tout de même faisable - personnellement, je vous conseille de faire en sorte que le XML corresponde à la méthode si cela est possible.
(Si elle est non-publique, vous devez fournir des drapeaux de liaison à l'appel à GetMethod
.)