HttpClient ReadAsAsync不反序列化
本文关键字:反序列化 ReadAsAsync HttpClient | 更新日期: 2023-09-27 18:13:36
我不确定我所遇到的问题是否与我使用任务的方式有关,或者如果我没有正确使用ReadAsAsync。我正在遵循我在这里找到的模式:
http://blogs.msdn.com/b/henrikn/archive/2012/02/11/httpclient-is-here.aspx背景:我反序列化的对象是一个POCO。属性没有属性。它只是几个值类型属性和几个集合属性。REST服务似乎也可以正常工作。当我查看服务返回的JSON时,它似乎没有问题。使用Web API 2.1 5.1.2
问题:. .正在调用HttpResponseMessage.Content.ReadAsAsync()。有时它工作(返回一个对象),有时它不(抛出"线程被中止"或返回null)。看起来content属性只能读取一次,随后的读取会抛出错误。请参阅下面代码中的注释。
相关问题:HttpContent。ReadAsAsync反序列化问题
这个问题似乎和我的相似。答案是一个错误,但这是超过两年的时间。
代码:[TestMethod]
public void AddSiteTest()
{
// Use POST to create a resource i.e. insert. Use PUT to update.
Site site = new Site {SiteName = "Test", Active = true, URI="www.test.com" };
Site newSite = null;
client.PostAsJsonAsync<Site>(baseURI + "/Sites/AddSite?securityKey="+ SecurityKey, site).ContinueWith(x =>
{
HttpResponseMessage response = x.Result;
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
try
{
string str = Task.Run(() => response.Content.ReadAsStringAsync()).Result; // yep its json and it is a proprety serialized object
// Method 1 (preferred... ):
//Site siteA = Task.Run(() => response.Content.ReadAsAsync<Site>()).Result; // usuallly throws if content has been read
// Method 2:
Site siteB = response.Content.ReadAsAsync<Site>().Result; // usully returns a valid result (when I dont put a breakpoint on it). Does not deadlock.
// Method 3:
response.Content.ReadAsAsync<Site>().ContinueWith(d =>
{
Site siteC = d.Result; // returns null
});
}
catch (Exception ex)
{
string y = ex.Message;
}
}
});
}
尝试使用await:
string str = await response.Content.ReadAsStringAsync();
你必须在void之前添加async