使用数据中的参数调用C#方法

说,我有一个像这样的XML字符串,

foo abc def ... ghi jkl 

我有一个方法

 void foo(String param1, String param2, ..., String param99, String param100) { ... } 

有没有简单的方法让我将这个字符串映射到一个真正的方法调用,其中params匹配C#中方法的param名称?

假设你知道类型,有一个实例,并且该方法实际上是公共的:

 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); 

请注意,我在这里进行区分大小写的名称匹配,这对您的示例无效。 如果你想要不区分大小写,那就稍微难了,但仍然可行 – 我个人建议你尽可能使XML与方法匹配。

(如果它是非公共的,则需要为GetMethod调用提供一些绑定标志。)

这样的事情怎么样:

  public void Run(XmlElement rootElement) { Dictionary xmlArgs = new Dictionary(StringComparer.OrdinalIgnoreCase); foreach( XmlElement elem in rootElement ) xmlArgs[elem.LocalName] = elem.InnerText; MethodInfo mi = this.GetType().GetMethod(xmlArgs["METHOD"]); List args = new List(); foreach (ParameterInfo pi in mi.GetParameters()) args.Add(xmlArgs[pi.Name]); mi.Invoke(this, args.ToArray()); } 

编辑如果必须匹配构造函数中的名称。 只需抛出构造函数,因为它不是名称/值的列表,而只是所需对象类型的列表,并且名称不是必需的。 使用属性在xml元素名称和类中的字段之间进行匹配。