3 回答

TA貢獻1796條經驗 獲得超4個贊
的呼喚
all.ReadAsAsync<Object>().Result;
JObject返回一個不能通過簡單轉換轉換為的實例Yelp。而是ReadAsAsync像這樣調用
var business = await all.ReadAsAsync<Common.Models.Yelp.Yelp>();
return business;
如果你仍然想調用它,object你可以這樣做
var business = await all.ReadAsAsync<object>();
return ((JObject)business).ToObject<Yelp>();
筆記
響應 json 不包含額外的花括號。它只是JObject將它們添加到調試視圖中。通過檢查將響應讀取為字符串的結果很容易檢查這一點all.ReadAsStringAsync().Result。

TA貢獻1854條經驗 獲得超8個贊
使用 JSON.NET 的Deserialize 方法使用泛型類型重載將字符串反序列化為所需的 POCO。
public async Task<HttpContent> InvokeApi(string path, HttpAction action, HttpContent content = null, TimeSpan? overrideTimeout = null, string externalServer = null)
{
var sUrl = externalServer == null ? ServerUrl : externalServer;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(sUrl);
if (overrideTimeout.HasValue)
{
client.Timeout = overrideTimeout.Value;
}
//this.Log("Connecting to {0} Api at {1}".Fmt(WebPortalServer, ServerUrl));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", AccessToken);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response;
switch (action)
{
case HttpAction.Get:
response = await client.GetAsync(path);
break;
case HttpAction.Post:
response = await client.PostAsync(path, content);
break;
case HttpAction.Put:
response = await client.PutAsync(path, content);
break;
case HttpAction.Delete:
response = await client.DeleteAsync(path);
break;
default:
throw new ArgumentOutOfRangeException("action", action, null);
}
return response.IsSuccessStatusCode ? response.Content : null;
}
}
public async Task<Common.Models.Yelp.Yelp> GetAllBusiness(decimal latitude, decimal longitude)
{
HttpContent all = await _webPortalApiClient.InvokeApi($"businesses/search?limit=10&latitude={latitude}&longitude={longitude}", HttpAction.Get, null, null, "https://api.yelp.com/v3/");
if (all == null)
{
return null;
}
string responseBody = await all.ReadAsStringAsync();
// Deserialize from serialized string into your POCO
var business = JsonConvert.DeserializeObject<Common.Models.Yelp.Yelp>(responseBody);
return business;
}

TA貢獻1794條經驗 獲得超8個贊
var business = all.Result;
var resultString = business.ReadAsStringAsync();
return JsonConvert.DeserializeObject<Common.Models.Yelp.Yelp>(resultString);
- 3 回答
- 0 關注
- 144 瀏覽
添加回答
舉報