Je vois dans de nombreux exemples sur le Web utilisant le nouvel objet HttpClient
(dans le cadre de la nouvelle API Web) qu'il devrait y avoir une méthode HttpContent.ReadAsAsync<T>
. Cependant, MSDN ne mentionne pas cette méthode, ni IntelliSense ne la trouve.
Où est-il allé et comment puis-je le contourner?
Il semble que ce soit une méthode d'extension (dans System.Net.Http.Formatting):
Mettre à jour:
PM> paquet d'installation Microsoft.AspNet.WebApi.Client
Selon la page du paquet System.Net.Http.Formatting NuGet, le paquet System.Net.Http.Formatting
est maintenant hérité et se trouve plutôt dans le paquet Microsoft.AspNet.WebApi.Client
disponible sur NuGet ici .
J'ai le même problème, donc j'obtiens simplement une chaîne JSON et la désérialisation dans ma classe:
HttpResponseMessage response = await client.GetAsync("Products");
//get data as Json string
string data = await response.Content.ReadAsStringAsync();
//use JavaScriptSerializer from System.Web.Script.Serialization
JavaScriptSerializer JSserializer = new JavaScriptSerializer();
//deserialize to your class
products = JSserializer.Deserialize<List<Product>>(data);
Si vous utilisez déjà Newtonsoft.Json
et ne souhaitez pas installer Microsoft.AspNet.WebApi.Client
:
var myInstance = JsonConvert.DeserializeObject<MyClass>(
await response.Content.ReadAsStringAsync());
Dans votre projet, cliquez avec le bouton droit de la souris et sélectionnez Gérer les packages NuGet pour Microsoft.AspNet.WebApi.Client, installez-le et vous aurez accès à la méthode d'extension.
Après avoir appuyé sur celui-ci plusieurs fois et suivi de nombreuses suggestions, si vous ne le trouvez pas disponible après l'installation de NuGet Microsoft.AspNet.WebApi.Client, ajoutez manuellement une référence du dossier des packages dans la solution:
\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll
Et n'entrez pas dans le piège de l'ajout d'anciennes références à System.Net.Http.Formatting.dll.
Vous pouvez écrire une méthode d'extension:
public static async Task<Tout> ReadAsAsync<Tout>(this System.Net.Http.HttpContent content) {
return Newtonsoft.Json.JsonConvert.DeserializeObject<Tout>(await content.ReadAsStringAsync());
}