如何使用HTTP GetAsync方法对对象进行序列化和反序列化?

3

将Web应用程序的框架从4.0升级到4.6后,我发现HTTP协议库中不再有 ReadAsAsync()方法,而是使用 GetAsync() 代替。 我需要使用 GetAsync() 序列化自定义对象。

使用ReadAsAsync()的代码:

<code><code><code>CustomResponse customResponse = client.ReadAsAsync("api/xxx", new StringContent(new JavaScriptSerializer().Serialize(request), Encoding.UTF8, "application/json")).Result; 
</code></code></code>

另一个基于 ReadAsAsync() 的示例:

CustomResponse customResponse = await Response.Content.ReadAsAsync<CustomResponse>(); 

如何使用GetAsync()方法来实现相同的目标?
1个回答

4
您可以这样使用它: (您可能需要在另一个线程上运行它以避免等待响应)
using (HttpClient client = new HttpClient())
{
    using (HttpResponseMessage response = await client.GetAsync(page))
    {
        using (HttpContent content = response.Content)
        {
            string contentString = await content.ReadAsStringAsync();
var myParsedObject = (MyObject)(new JavaScriptSerializer()).Deserialize(contentString ,typeof(MyObject));
        }

    }
}

我需要使用GetAsync()序列化我的自定义对象。你的例子使用HttpResponseMessage,但我需要使用CustomResponse对象。 - Dmitry Kazakov
在我的应用程序中,我使用自定义对象,并希望获取响应并对其进行序列化。我希望像提供的示例中那样只有几行代码。 - Dmitry Kazakov
@DmitryKazakov 这正是序列化/反序列化器的用途 - 远程应用程序(通常是WebApp/API等)在一端序列化自定义对象,并发送序列化字符串。然后,另一个(您自己的/本地的)应用程序可以将此字符串反序列化为相同类型的自定义对象... 这只需要几行代码。我每天都使用这种几乎完全相同的方法从Web服务器获取响应并解析出对象。再次强调,我不明白使用“CustomResponse”会有什么不同的好处? - Geoff James
我已经构建了该应用程序。我不得不升级框架版本以添加一些功能,但我不想重构大部分代码(而且这是不可能的,因为有几个库是编译的,没有源代码)。我只想以与ReadAsAsync()相同的方式使用GetAsync()和序列化,以便应用程序能够与编译的dll文件一起正常工作。 - Dmitry Kazakov
将其作为答案发布,并附上完整的代码示例,如果代码能正常运行,我会将其标记为正确答案。 - Dmitry Kazakov
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接