如何修改C#代码获取JSON数组中的全部元素?
修改C# HTTP请求代码以返回完整JSON数组
先看原代码:
private T GetResponse<T>(string queryUrl) { UriBuilder uri = new UriBuilder(queryUrl); using (var requestMessage = new HttpRequestMessage { RequestUri = new Uri(uri.Uri.AbsoluteUri), Method = HttpMethod.Get }) { var responseMessage = httpClient.SendAsync(requestMessage).Result; if (!responseMessage.IsSuccessStatusCode) { var message = responseMessage.Content.ReadAsStringAsync().Result; throw new InvalidOperationException($"Error: {responseMessage.StatusCode} Message: {message}"); } var responseJson = responseMessage.Content.ReadAsStringAsync().Result; var response = DeserializeObject<List<T>>(responseJson); return response[0]; } }
原代码仅返回解析后List<T>的第一个元素,要获取数组全部元素,只需做两处核心修改:
- 调整方法返回类型:把方法返回值从
T改为List<T>,确保能承载整个集合 - 修改返回语句:将
return response[0];替换为return response;,直接返回完整的解析结果
修改后的代码如下:
private List<T> GetResponse<T>(string queryUrl) { UriBuilder uri = new UriBuilder(queryUrl); using (var requestMessage = new HttpRequestMessage { RequestUri = new Uri(uri.Uri.AbsoluteUri), Method = HttpMethod.Get }) { var responseMessage = httpClient.SendAsync(requestMessage).Result; if (!responseMessage.IsSuccessStatusCode) { var message = responseMessage.Content.ReadAsStringAsync().Result; throw new InvalidOperationException($"Error: {responseMessage.StatusCode} Message: {message}"); } var responseJson = responseMessage.Content.ReadAsStringAsync().Result; var response = DeserializeObject<List<T>>(responseJson); return response; } }
额外提个优化点:原代码用.Result阻塞异步操作,在部分场景下可能引发死锁,更规范的写法是改成异步方法并使用await:
private async Task<List<T>> GetResponseAsync<T>(string queryUrl) { UriBuilder uri = new UriBuilder(queryUrl); using (var requestMessage = new HttpRequestMessage { RequestUri = new Uri(uri.Uri.AbsoluteUri), Method = HttpMethod.Get }) { var responseMessage = await httpClient.SendAsync(requestMessage); if (!responseMessage.IsSuccessStatusCode) { var message = await responseMessage.Content.ReadAsStringAsync(); throw new InvalidOperationException($"Error: {responseMessage.StatusCode} Message: {message}"); } var responseJson = await responseMessage.Content.ReadAsStringAsync(); var response = DeserializeObject<List<T>>(responseJson); return response; } }
内容的提问来源于stack exchange,提问作者user2835586
相关产品推荐
相关产品推荐

