Код не может найти конкретное значение из 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"];
}
Другие вопросы по тегам