2016-03-24 11 views
2

経由でメソッドを呼び出すときに、私はリフレクション経由JsonConvert.DeserialiseObjectを呼び出そうとすると、私は私が他にどのような情報Iわからないあいまいな試合反射

MethodInfo method = typeof(JsonConvert).GetMethod("DeserializeObject", new[] { typeof(string) }); 

を呼び出したいの過負荷のためのパラメータの型を指定して、私にもかかわらず、AmbiguousMatchExceptionを取得ユニークな一致を見つけるように供給することができます

アイデア?

+1

あなたは 'GetMethods()'とすべてのメソッドを取得しようとし、その後LINQsでそれらをフィルタリングすることができ'Single()'または 'Where()'です。 – thehennyy

+0

一般的な過負荷もありますか? GetMethodsを実行して返すものを確認する – pm100

+0

@thehennyyは正しいですが、同じ名前のいくつかのメソッドがありますが、異なるパラメータがあります。なぜ例外が発生するのでしょうか? – AAlferez

答えて

6

述べたように、あなたがMETHODINFOを見つけるためにLinqs Single()方法でGetMethods()メソッドを使用することができ、あなたが探しているとおり:

var method = typeof (JsonConvert).GetMethods().Single(
      m => 
       m.Name == "DeserializeObject" && 
       m.GetGenericArguments().Length == 1 && 
       m.GetParameters().Length == 1 && 
       m.GetParameters()[0].ParameterType == typeof(string));