Код не может найти конкретное значение из JSON
Я использовал C# для выполнения API-вызовов по программному вызову OnTime от Axosoft.
Я создал три пользовательских поля в клиенте:
custom_170
custom_171
custom_172
Каждое поле добавляется в раздел в вызове JSON "custom_fields". OnTime предоставляет собственную API-оболочку, которая позволяет легко работать с их кодом.
В приведенном ниже коде C# я использую get для извлечения JSON из "Дефектов", а затем перебираю поиск дефекта № 7.
Если найден номер 7, он получит 5 значений из идентификатора JSON, имени, custom_170, custom_171, custom_172.
Проблема, с которой я сталкиваюсь, заключается в том, что моя программа находит Id, Name, custom_170, но оператор if, который ищет custom_171, получает значение из custom_172 и последнее, если оно никогда не было затронуто (см. Результаты ниже).
Что я могу получить значения из custom_171 и custom_172, и получить их в нужном месте?
JSON (фрагмент)
{
"data": {
"reported_date": "2014-09-25T04:00:00Z",
"percent_complete": 100,
"archived": false,
"publicly_viewable": false,
"completion_date": null,
"due_date": null,
"description": "",
"name": "Defect Created from API Explorer 3",
"notes": "",
"number": "7",
"custom_fields": {
"custom_171": "Work Around Steps",
"custom_172": "Work Journal",
"custom_170": "Analysis"
}
}
}
Код C#
var DefectInfo = axosoftClient.Defects.Get();
int? defectID = 0;
string defectName = "";
string defectAnalysis = "";
string defectWAS = "";
string defectWJ = "";
foreach (var defect in DefectInfo.Data)
{
if(defect.Id == 7)
{
defectID = defect.Id;
defectName = defect.Name;
if(defect.CustomFields.ContainsKey("custom_170"))
{
defectAnalysis = (string)defect.CustomFields["custom_170"];
}
if(defect.CustomFields.ContainsKey("custom_171"))
{
defectWAS = (string)defect.CustomFields["custom_171"];
}
if (defect.CustomFields.ContainsKey("custom_172"))
{
defectWAS = (string)defect.CustomFields["custom_172"];
}
}
}
Console.WriteLine("Defect ID: {0} Defect Name: {1}\nAnalysis: {2} \nWork Around: {3}\nWork Journal: {4}\n\n", defectID, defectName, defectAnalysis, defectWAS, defectWJ);
Результаты
Defect ID: 7 Defect Name: Defect Created from API Explorer 3
Analysis: Analysis
Work Around: Work Journal
Work Journal:
1 ответ
defectWAS
назначается дважды defectWJ
не назначено новое значение
Вы, вероятно, имели в виду:
if (defect.CustomFields.ContainsKey("custom_172"))
{
defectWJ = (string)defect.CustomFields["custom_172"];
}