Я пытаюсь сделать функцию, которая возвращает сумму значений, которые я получаю в файле Json. Поэтому для этого я создал модель для десаризации файла Json, она выглядит следующим образом: using System.Collections.Generic;
namespace ServerMonitoringApi.Controllers.CpuUsage.Model
{
public class Metric
{
public string __name__ { get; set; }
public string core { get; set; }
public string instance { get; set; }
public string job { get; set; }
}
public class Result
{
public Metric metric { get; set; }
public IList<object> value { get; set; }
}
public class Data
{
public string resultType { get; set; }
public IList<Result> result { get; set; }
}
public class CpuUsageResponse
{
public string status { get; set; }
public Data data { get; set; }
}
}
Он отлично работает для десериализации et c .. I ' Я проверил это.
В моем контроллере у меня есть эта функция, которая возвращает сумму и вызывает проблему:
[HttpGet("Number/{instance}&{port}")]
public async Task<double> GetNumCpuUsagePerInstance(string instance, string port)
{
string perInstanceLink = MetricApiLink + "{instance=\"" + instance + ":" + port + "\"}";
string idleModeLink = MetricApiLink +
"{mode=\"idle\",instance=\"" + instance + ":" + port + "\"}";
dynamic dataGetAll;
dynamic dataGetIdle;
using (var httpClient = new HttpClient())
{
using (var response = await httpClient
.GetAsync(perInstanceLink))
{
string apiResponse = await response.Content.ReadAsStringAsync();
dataGetAll = JsonConvert.DeserializeObject<CpuUsageResponse>(apiResponse);
}
}
using (var httpClient = new HttpClient())
{
using (var response = await httpClient
.GetAsync(idleModeLink))
{
string apiResponse = await response.Content.ReadAsStringAsync();
dataGetIdle = JsonConvert.DeserializeObject<CpuUsageResponse>(apiResponse);
}
}
double sum1 = 0;
double sum2 = 0;
NumberFormatInfo provider = new NumberFormatInfo();
provider.NumberGroupSeparator = ".";
foreach(CpuUsageResponse x in dataGetAll)
{
sum1 += Convert.ToDouble(x.data.result[1].value[1], provider);
}
return sum1;
}
Я проверил каждую функцию, они работают нормально, но когда я пытаюсь это сделать " «Foreach» не работает и выдает сообщение об ошибке:
RuntimeBinderException: невозможно неявно преобразовать тип 'ServerMonitoringApi.Controllers.CpuUsage.Model.CpuUsageResponse' в 'System.Collections.IEnumerable'. Существует явное преобразование (вам не хватает приведения?). И скажите, что ошибка в строке 123:
NumberFormatInfo provider = new NumberFormatInfo();
provider.NumberGroupSeparator = ".";
/*here(line 123)->*/ foreach(CpuUsageResponse x in dataGetAll)
{
sum1 += Convert.ToDouble(dataGetAll.data.result[1].value[1], provider);
}
My Json Файл имеет вид:
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,0",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"95595.25"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,1",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"103647.703125"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,2",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"94185.015625"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,3",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"102109.203125"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,4",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"96709.59375"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,5",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"102046.5625"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,6",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"98963.453125"
]
},
{
"metric": {
"__name__": "wmi_cpu_time_total",
"core": "0,7",
"instance": "192.168.1.101:9182",
"job": "Server-monitoring-Api"
},
"value": [
1583873150.877,
"89011.53125"
]
}
]
}
}
Я пытаюсь сложить значения с индексом 1, т.е. value[1]
и вернуть его