Клиент Octopus не может анализировать словарь Deployments в ReleaseProgressionResource

Я пытаюсь получить ход выпуска для определенного проекта с помощью клиента Octopus (источник github), вызывая конечную точку /api/progression/<project-id> как это:

// _repository is of type IOctopusRepository 
_repository.Client.Get<ProgressionResource>($"/api/progression/{projectId}");

Что сразу бросает OctopusDeserializationException высказывание:

Невозможно обработать ответ от сервера: невозможно десериализовать текущий объект JSON (например, {"name":"value"}) в тип System.Linq.IOrderedEnumerable`1[Octopus.Client.Model.DashboardItemResource]", поскольку для этого типа требуется Массив JSON (например, [1,2,3]) для правильной десериализации. Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип, чтобы он был обычным типом .NET (например, не примитивный тип, такой как целое число, а не тип коллекции, такой как массив или список), который можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализоваться из объекта JSON. Путь 'Releases[0].Deployments.Environments-1.Id', строка 55, позиция 15.. Содержание ответа: { "Environments": [ { "Id": "Environments-1", "Name": "test- Окружающая среда" },

В каждом Релизе (типа ReleaseProgressionResource) из Releases есть реквизит Deployments типа Dictionary<string,IOrderedEnumerable<DashboardItemResource>>. Однако похоже, что клиент (который был создан для использования этого API) не может его сериализовать. Из сообщения об исключении кажется, что клиент пытается проанализировать это как массив JSON.

Вот пример Deployments части ответа конечной точки в необработанном формате JSON (с некоторыми фиктивными данными):

"Deployments": {
        "Environments-1": {
          "Id": "Deployments-12345",
          "ProjectId": "Projects-123",
          "EnvironmentId": "Environments-1",
          "ReleaseId": "Releases-12345",
          "DeploymentId": "Deployments-12345",
          "TaskId": "ServerTasks-12345",
          "ReleaseVersion": "5.4.3",
          "Created": "2016-09-22T21:26:38.886+00:00",
          "QueueTime": "2016-09-22T21:26:38.855+00:00",
          "CompletedTime": "2016-09-22T21:29:48.355+00:00",
          "State": "Success",
          "HasPendingInterruptions": false,
          "HasWarningsOrErrors": false,
          "ErrorMessage": "",
          "Duration": "3 minutes",
          "IsCurrent": true,
          "IsPrevious": false,
          "IsCompleted": true,
          "Links": {
            "Self": "/api/deployments/Deployments-12345",
            "Release": "/api/releases/Releases-12345",
            "Task": "/api/tasks/ServerTasks-12345"
          }
        }
 }

У кого-нибудь есть идеи, что может происходить / что я могу делать неправильно? Заранее спасибо.


person valorl    schedule 23.09.2016    source источник


Ответы (1)


Это весь объект развертывания? Объекты JSON необходимо заключать в квадратные скобки.

{
    "Deployments": {
        "Environments-1": {
            "Id": "Deployments-12345",
            "ProjectId": "Projects-123",
            "EnvironmentId": "Environments-1",
            "ReleaseId": "Releases-12345",
            "DeploymentId": "Deployments-12345",
            "TaskId": "ServerTasks-12345",
            "ReleaseVersion": "5.4.3",
            "Created": "2016-09-22T21:26:38.886+00:00",
            "QueueTime": "2016-09-22T21:26:38.855+00:00",
            "CompletedTime": "2016-09-22T21:29:48.355+00:00",
            "State": "Success",
            "HasPendingInterruptions": false,
            "HasWarningsOrErrors": false,
            "ErrorMessage": "",
            "Duration": "3 minutes",
            "IsCurrent": true,
            "IsPrevious": false,
            "IsCompleted": true,
            "Links": {
                "Self": "/api/deployments/Deployments-12345",
                "Release": "/api/releases/Releases-12345",
                "Task": "/api/tasks/ServerTasks-12345"
            }
        }
    }
}
person smarble    schedule 23.09.2016
comment
Нет, это просто та часть, где сериализация невозможна. Это часть большей структуры. Я извлекаю ProgressionResource, в котором есть коллекция ReleaseProgressionResources, в которой, среди прочего, есть этот словарь Deployments, который не может быть десериализован, поскольку десериализатор пытается проанализировать его как объект со свойством с именем Environments-1, а не как dict. - person valorl; 23.09.2016