#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();
}