You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:00:04