ASP.NET получить количество результатов из HttpResponseMessage

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть работающий HttpResponseMessage, который возвращает данные, мой вопрос в том, как мне подсчитать данные?

 using (HttpClient httpClient = new HttpClient())
{
     httpClient.BaseAddress = new Uri("https://api.com/");
     httpClient.DefaultRequestHeaders.Accept.Clear();
     httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
     httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
     HttpResponseMessage response = httpClient.GetAsync("v1/registrants/search?email="   email).Resu<
     return response.Content.ReadAsStringAsync().Resu<
}
  

Пожалуйста, помогите.

Это то, что он возвращает:

 {
  "links" : {
    "next" : null
  },
  "items" : [ ]
}
  

Если значение items пустое, это означает, что количество должно быть равно 0.

И это то, что он возвращает, когда он не пустой

 {
    "links": {
        "next": null
    },
    "items": [
        {
            "registrantId": 31436518,
            "personalId": 38464352,
            "firstName": "FirstName",
            "lastName": "LastName",
            "email": "email@domain.com",
            "address": ", Stoney Creek, , 90210, ",
            "phone": "9053341529",
            "_links": {
                "self": "/registrants/31436518"
            }
        }
    ]
}
  

Комментарии:

1. можете ли вы также опубликовать, какие данные вы получаете из API?

2. Я обновил свой вопрос.

3. а что, если значение items не пустое?

4. Я бы посоветовал использовать динамические типы c #, если вы не знаете структуру ответа.

5. @KunalMukherjee Я обновил свой вопрос.

Ответ №1:

Установите Nuget Newtonsoft.Json, прежде чем продолжить.


1) Десериализовать сериализованный строковый ответ в JObject

 public async Task<JObject> FetchData()
{
    using (HttpClient httpClient = new HttpClient())
    {
         httpClient.BaseAddress = new Uri("https://api.com/");
         httpClient.DefaultRequestHeaders.Accept.Clear();
         httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
         httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
         HttpResponseMessage response = httpClient.GetAsync("v1/registrants/search?email="   email).Resu<
         string response = await response.Content.ReadAsStringAsync();
         return JsonConvert.DeserializeObject<JObject>(response);
    }
}
  

2) Вызовите для него .Count() метод, используйте комбинацию оператора безопасной оценки с объединяющим оператором null для резервного копирования, если items его нет.

 public async Task<int> CalculateCount()
{
    JObject responseObject = await FetchData();
    return responseObject["items"]?.Count() ?? 0;
}
  

Ответ №2:

Вы можете использовать JSON.net для анализа JSON.

Сначала определите класс, для которого моделируются результаты:

 class ResultModel
{
  public List<Item> items { get; set; }
}
  

Затем вызовите JsonConvert.DeserializeObject<T>(string json) для анализа / сопоставления результата:

 using (HttpClient httpClient = new HttpClient())
{
   httpClient.BaseAddress = new Uri("https://api.com/");
   httpClient.DefaultRequestHeaders.Accept.Clear();
   httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
   httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
   HttpResponseMessage response = httpClient.GetAsync("v1/registrants/search?email="   email).Resu<
   string json = response.Content.ReadAsStringAsync().Resu<
   ResultModel result = JsonConvert.DeserializeObject<ResultModel>(json);
   int count = result.items.Count();
}