2016-06-22 5 views
-2

Ich möchte in der Lage sein, einen Rückgabetyp an meine Funktion DoRequest() übergeben, so dass ich angeben kann, welcher Typ deserialize die Antwort, aber es scheint eine Variable von System.Type nicht übergeben werden in einen generischen <> Ausdruck als der Compiler gibt den Fehler "responseType is a variable but is used like a type".Übergeben Sie System.Type als Parameter an eine generische Methode

Gibt es eine Möglichkeit, dies zu tun?

static void Main(string[] args) 
    var requestObj = new MyRequestType(); 
    var responseObj = DoWebRequest(requestObj , typeof(MyResponseType)); 
} 

static object DoRequest(object reqObj, Type responseType){ 
    HttpClient client = new HttpClient(); 
    var response = client.PostAsJsonAsync("http://someuri.com", reqObj); 
    var stringResponse = response.Result.Content.ReadAsStringAsync().Result; 
    return JsonConvert.DeserializeObject<responseType>(respPostEpisode); 
    //Compile error: responseType is a variable but is used like a type 
} 
+1

Ihre Methode ist nicht generisch, das ist das Problem –

+0

Mögliche Duplikate von [Wie verwende ich Reflexion, um eine generische Methode aufzurufen?] (Http://stackoverflow.com/questions/232535/how-doi-i-use- Reflection-to-Call-a-Generic-Methode) – HimBromBeere

Antwort

2

wenn Sie nicht können oder wollen nicht Ihre Methode generisch machen, dann müssen Sie nicht generische Überlastung von DeserializeObject:

return JsonConvert.DeserializeObject(respPostEpisode, responseType); 
0

Warum es nicht auf diese Weise

static void Main(string[] args) 
    var requestObj = new MyRequestType(); 
    var responseObj = DoWebRequest<MyResponseType>(requestObj)); 
} 

static object DoRequest<T>(object reqObj){ 
    HttpClient client = new HttpClient(); 
    var response = client.PostAsJsonAsync("http://someuri.com", reqObj); 
    var stringResponse = response.Result.Content.ReadAsStringAsync().Result; 
    return JsonConvert.DeserializeObject<T>(respPostEpisode); 
}