Недопустимое приведение из JArray в JObject

#c# #json.net #testrail

Вопрос:

Я уже реализовал интеграцию с Selenium-Testrail. Все было правильно до сегодняшнего дня, когда я продолжаю получать:

OneTimeSetUp: Система.Исключение InvalidCastException : Невозможно привести объект типа «Newton. Json.Linq.JObject» к типу » Newton.Json.Linq.Джаррей».

Вот строка кода, в которой происходит сбой:

 JArray getListOfAllActiveTestRun = (JArray)client.SendGet($"get_runs/{ProjectId}");
 

Поскольку я предполагаю, что мне нужно иметь a JArray , чтобы использовать его позже в цикле foreach (полный просмотр кода)

 if (RunId == null)
{
    JArray getListOfAllActiveTestRun = (JArray)client.SendGet($"get_runs/{ProjectId}");

    foreach (JObject testRun in getListOfAllActiveTestRun)
    {
        bool isCompleted = Convert.ToBoolean(testRun["is_completed"]);
        string lastTestRunId = testRun["id"].ToString();
        string lastSuiteId = testRun["suite_id"].ToString();
        int failedTestCount = testRun["failed_count"].Value<int>();
        int untestedTestCount = testRun["untested_count"].Value<int>();


        if (!isCompleted amp;amp; lastSuiteId.Equals(SuitId) amp;amp; failedTestCount > 0 || !isCompleted amp;amp; lastSuiteId.Equals(SuitId) amp;amp; untestedTestCount > 0) // we are checking that there is not finished testRun with suitId equal to this and failed tests and untested tests
        {
            RunId = lastTestRunId;
            break;
        }
    }
}
 

Проверил решения, и большую часть времени я сталкивался с выбором JsonConvert.DeserializeObject , но я не уверен, что это правильный намек в моем случае.

Изменить (JSON)

 "runs":

      {
         "id":2874,
         "suite_id":878,
         "name":"[ENV: TEST] [BACKOFFICE] Automation Test Run - [20:02:55 PM]",
         "description":null,
         "milestone_id":null,
         "assignedto_id":null,
         "include_all":true,
         "is_completed":false,
         "completed_on":null,
         "config":null,
         "config_ids":[
            
         ],
         "passed_count":171,
         "blocked_count":0,
         "untested_count":1,
         "retest_count":0,
         "failed_count":3,
         "custom_status1_count":0,
         "custom_status2_count":0,
         "custom_status3_count":0,
         "custom_status4_count":0,
         "custom_status5_count":0,
         "custom_status6_count":0,
         "custom_status7_count":0,
         "project_id":19,
         "plan_id":null,
         "created_on":1631901776,
         "updated_on":1631901776,
         "refs":null,
         "created_by":124,
         "url":"ssss"
      }
 

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

1. Не могли бы вы также поделиться с нами соответствующей частью json?

2. Вы имеете в виду это: элемент «клиент»? Отредактировано и добавлено 🙂

3. @Kermi: Нет. Json, возвращаемый в результате вызова get_runs .

4. @Kermi: Это недопустимый json. Если мы добавим отсутствующие начало { и конец, } чтобы сделать его действительным, то у вас есть объект json (JObject), а не массив json (JArray), поэтому приведение неверно.

5. Что вам нужно, так это изменить приведение JObject и получить доступ к таким свойствам, как testRun["runs"]["is_completed"] .

Ответ №1:

С сегодняшнего дня я сталкиваюсь с той же проблемой-похоже, в API TestRail произошли изменения.

Из ссылки на API TestRail: «…Эти массовые конечные точки больше не будут возвращать массив всех сущностей, а вместо этого вернут объект с дополнительными полями разбиения на страницы и массивом до 250 сущностей.»

Источник: https://www.gurock.com/testrail/docs/api/reference/runs#getruns

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

1. Вы устранили проблему? Это так, не могли бы вы дать мне подсказку с кодом?