使用动态类型调用非静态泛型方法

时间:2014-03-13 10:42:32

标签: c# generics reflection json.net

我试图在运行时使用detemirned类型调用泛型方法。此调用:JToken对象上的Type type = ...; jToken.Value.Value<type>();

我走到这一步,我相信我几乎就在那里。但我得到了一个&#34;参数计数不匹配&#34;调用Invoke时出现异常。我无法弄清楚原因。

public void Foo(JObject obj, Type type)
{
    foreach (var valuePair in obj)
    {
        JToken jToken = valuePair.Value;
        var genericMethod = jToken.GetType().GetMethod("Value").MakeGenericMethod(new Type[] {type});
        // should call jToken.Value<type>()
        var value = genericMethod.Invoke(jToken, null);
    }
}

2 个答案:

答案 0 :(得分:1)

Value() JObject方法需要一个关键参数,但您没有指定该参数,因此找不到具有0个参数的方法并抛出异常。

答案 1 :(得分:1)

JToken.Value需要一个参数:值的关键字。所以你会这样做:

var value = genericMethod.Invoke(jToken, new[] { valuePair.Key });