ReadAsAsync<>在PCL Repack的System.Net.Http.Formatting库中

时间:2014-03-27 16:32:51

标签: c# rest json.net portable-class-library dotnet-httpclient

尝试调用ReadAsAsync<>时出现以下错误System.Net.Http.Formatting的Bitrium.Http.Extensions重新包装中的扩展方法。

  

类型中的方法'SerializeToStreamAsync'   程序集中的“System.Net.Http.ObjectContent”   'Bitrium.Http.Extensions,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = 43390f7aed073600'没有实现。

我在PCL项目中有类似于以下代码的东西,我通过简单的单元测试进行测试。我没有实现await模式,但我不相信它与此相关。

public class RestApi()
{
    public void Get()
    {
        HttpResponseMessage response = new HttpResponseMessage();
        HttpClient client = new HttpClient();
        response = client.GetAsync("http://someUrl.com").Result;
        var modelList = response.Content.ReadAsAsync<List<Model>>().Result; // I get the exception here
     }
}

对方法的调用:

var target = new RestApi();
target.Get();

此时我能做些什么吗?我不一定需要Async功能,所以另一个仍然将我的响应转换为我的模型的实现也可以。

1 个答案:

答案 0 :(得分:6)

我没有使用Bitrium重新打包来尝试重用System.Net.Http.Formatting中的ReadAsAsync<T>扩展方法,而是选择 Json.NET 。因此,不需要依赖重新包装,而只需要依赖包含HttpClient(NuGet <package id="Microsoft.Net.Http" version="2.2.18" targetFramework="portable-net45+sl50+MonoAndroid10+MonoTouch10" />)的lib的PCL构建的当前标准实现。

var resultString = response.Content.ReadAsStringAsync().Result;
Contacts = JsonConvert.DeserializeObject<List<T>>(resultString);

我发现this post对新的Json.NET片段很有帮助。