2016-08-08 20 views
0

Ich versuche, eine Methode zu machen, die jedes Modell an eine JSON-Antwort gebunden akzeptiert, aber ich kann nicht herausfinden, wie Sie den Typ des Klassenmodells dynamisch in das generische einfügen Parameter.Holen Sie sich den Typ der Klasse in generischen Parameter

Dies ist, was ich bisher habe:

public static async Task<object> DoPost(string url, FormUrlEncodedContent formEnc, object model) 
    { 
     using (HttpClient client = new HttpClient()) 
     using (HttpResponseMessage response = await client.PostAsync(url, formEnc)) 
     using (HttpContent content = response.Content) 
     { 
      var result = await content.ReadAsStringAsync(); 
      var modelType = model.GetType(); 
      model = JsonConvert.DeserializeObject<modelType>(result); 

      return model; 
     } 
    } 

Wie finde ich die richtige Darstellung des Typs in modelType bekommen?

Antwort

0

Dies kann einfach zu einem generischen wie unten verändert werden. Dann kann Ihr Generic einfach deserialisiert werden.

public static async Task<T> DoPost<T>(string url, FormUrlEncodedContent formEnc) 
{ 
    using (HttpClient client = new HttpClient()) 
    using (HttpResponseMessage response = await client.PostAsync(url, formEnc)) 
    using (HttpContent content = response.Content) 
    { 
     var result = await content.ReadAsStringAsync(); 
     return JsonConvert.DeserializeObject<T>(result); 
    } 
} 

Dies kann nun mit jeder Art von model als generischer Parameter aufgerufen werden. Dies kann nun aufgerufen werden, indem einfach der Generische Parameter T wie

var user = DoPost<User>(url, formEnc); 
übergeben wird
0

Sie können nur JsonConvert.PopulateObject verwenden, um die Instanz direkt zu füllen:

var result = await content.ReadAsStringAsync(); 
model = JsonConvert.PopulateObject(result, model); 

return model; 
Verwandte Themen