런타임시 detemirned 유형의 일반 메소드를 호출하려고합니다. 이 전화는 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