我想調用一個在運行時確定類型的泛型方法。此電話:Type type = ...; jToken.Value.Value<type>();
在JToken對象上。調用動態類型的非靜態泛型方法
我來到這裏了,我相信我快到了。但是在撥打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);
}
}
哎呀,我簡直不敢相信我錯過了... –
好這裏是一個奇怪的一個。如果我在'jToken'聲明之後放置了一個斷點,並且在立即窗口中鍵入:'jToken.Value()',那麼我會得到預期的結果。如果我把'jToken.Value (「someKey」)',那麼它會失敗,並且「無法訪問Newtonsoft.Json.Linq.JValue上的子值」 –
@Snæbjørn這是有原因的。 JToken類有一個名爲「Value」的方法,其中包含一個參數,即鍵。但是,對於JToken實例,有擴展方法,其中一個值爲(),這是您在中間窗口中調用的方法,而不是JToken類的Value方法。該方法甚至不存在於JToken中,它不屬於那裏,它是一種靜態方法。對於使用此方法的編譯器與編寫'StaticExtensionClass.Value (jToken)' –
frikinside