【问题标题】:How to serialize-deserialize object using HTTP GetAsync method?如何使用 HTTP GetAsync 方法序列化反序列化对象?
【发布时间】:2016-08-04 14:12:07
【问题描述】:

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

使用 ReadAsAsync() 的代码:

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

另一个基于 ReadAsAsync() 的例子

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

如何使用GetAsync() 方法实现相同的目标?

【问题讨论】:

    标签: c# asp.net serialization .net-4.6


    【解决方案1】:

    你可以这样使用它: (您可能希望在另一个线程上运行它以避免等待响应)

    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 对象。
    • 为什么你需要使用CustomResponse,究竟是什么?这就是我如何创建一个对 API 的 Http 请求,然后在 contentString 上使用我最喜欢的反序列化器 - 我很确定这是一种“标准方式”。使用CustomResponse 有什么不同?
    • 在我的应用程序中,我使用自定义对象,我想获取响应并将其序列化。我希望在提供的示例中只有几行。
    • @DmitryKazakov 这正是反序列化器的用途 - 远程应用程序(通常是 WebApp/API 等),在一端序列化自定义对象,并发送序列化字符串。然后,另一个(您自己的/本地应用程序)可以将此字符串反序列化为相同类型的自定义对象......这是几行代码。我日复一日地使用这种精确(几乎)的方法来获取来自 Web 服务器的响应,并解析出对象。再说一次,我看不出使用 CustomResponse 会给你带来什么不同的好处?
    • 我已经构建了应用程序。我不得不升级框架版本来添加一些功能,但我不想重构大部分代码(而且这是不可能的,因为编译的库很少而且没有源代码)。我只想以与 ReadAsAsync() 和序列化相同的方式使用 GetAsync(),以保持应用程序使用已编译的 dll。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2019-03-09
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2019-10-25
    • 2016-12-30
    相关资源
    最近更新 更多