HttpContent.ReadAsAsyncはどこにありますか?


283

新しいHttpClientオブジェクトを(新しいWeb APIの一部として)使用しているWeb上の多くの例で、HttpContent.ReadAsAsync<T>メソッドがあるはずです。ただし、MSDNはこの方法について言及しておらず、IntelliSenseはそれを見つけていません。

それはどこに行きましたか、そしてどのようにそれを回避しますか?

回答:


436

拡張メソッドのようです(System.Net.Http.Formatting内):

HttpContentExtensionsクラス

更新:

PM>インストールパッケージMicrosoft.AspNet.WebApi.Client

System.Net.Http.Formatting NuGetパッケージページによると、このSystem.Net.Http.Formattingパッケージはレガシーであり、代わりMicrosoft.AspNet.WebApi.ClientNuGetのこちらのパッケージで入手できます


これは最新のクライアントNugetsで廃止されましたか?今は見つかりません(以前は使用できました)。
georgiosd 2013年

それはそうかもしれない。.NET4.5では、非同期/タスク(待機など)に関して多くの新しいものが追加されたため、これらの拡張機能は不要になる可能性があります。たとえば、msdn.microsoft.com

4
@georgiosd答えを更新しました。当面System.Net.Http.Formattingは、nuget.org / packages / Microsoft.AspNet.WebApi.Clientパッケージに移動したようです。
Joseph Woodward

1
では、元の質問のメソッドHttpContent.ReadAsAsync<T>がMicrosoft.AspNet.WebApi.Clientにないのは本当ですか?推奨される代替品は何ですか?
Patrick Szalapski、2016

1
@JedatKinports確かにそうではありません。WebAPI.Clientパッケージには.NET 4.5が必要です。古いHttpContentExtensionsは.NET 4.0向けだったと思います
J ...

68

私は同じ問題を抱えているので、JSON文字列を取得してクラスに逆シリアル化するだけです。

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);

8
これが質問に答えないという事実を除けば、なぜこれが投票されたのですか?それは合理的な代替手段ではありませんReadAsAsyncか?
Jess

7
確かです!+1!
Mrchief

7
おそらく、拡張メソッドはどこに行ったのかという質問に答えなかったからでしょう。独自の
コードを

13
これは必ずしも不十分な回避策ではなく、ローカライズされているため、将来のnugetの更新などで壊れる可能性はありません。
2017

3
これは、応答にJSON content-typeがあることを前提としています。
CodeCaster 2017年

30

既に使用Newtonsoft.Jsonしていて、インストールしたくない場合Microsoft.AspNet.WebApi.Client

 var myInstance = JsonConvert.DeserializeObject<MyClass>(
   await response.Content.ReadAsStringAsync());

9

拡張メソッドを書くことができます:

public static async Task<Tout> ReadAsAsync<Tout>(this System.Net.Http.HttpContent content) {
    return Newtonsoft.Json.JsonConvert.DeserializeObject<Tout>(await content.ReadAsStringAsync());
}

それは私がやったことです-2行のメソッドのためにDLL全体をドラッグするつもりはありません。
Liz


0

NuGet Microsoft.AspNet.WebApi.Clientをインストールした後で使用できない場合は、これを数回ヒットし、多数の提案に従いました。ソリューションのパッケージフォルダーから手動で参照を追加します。

\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll

そして、System.Net.Http.Formatting.dll NuGetに古い参照を追加するという罠には入らないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.