2016-09-23 1 views
0

Je suis en train de se libérer des progressions pour un certain projet en utilisant le client Octopus (github source) appelant le point final /api/progression/<project-id> comme ceci:client Octopus ne peut pas analyser Déploiements dict dans ReleaseProgressionResource

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

Ce qui jette immédiatement un OctopusDeserializationException disant :

Impossible de traiter la réponse du serveur: Impossible désérialiser le objet JSON en cours (par exemple { "name": "valeur"}) dans le type « System.Linq.IOrderedEnu merable`1 [Octopus.Client.Model.DashboardItemResource] ' car le type requiert un tableau JSON (par ex. [1,2,3]) pour désérialiser correctement . Pour corriger cette erreur, changez le JSON en un tableau JSON (par exemple [1,2,3]) ou changez le type désérialisé pour qu'il soit un type normal .NET (par exemple, pas un type primitif comme un entier, pas une collection tapez comme un tableau ou une liste) qui peut être désérialisé à partir d'un objet JSON. JsonObjectAttribute peut également être ajouté au type pour le forcer à désérialiser à partir d'un objet JSON. Path 'Popular [0] .Deployments.Environments-1.Id', ligne 55, la position 15 .. contenu de réponse: { "environnements": [{ "Id": "Environnements-1", « Nom « : "test-environnement" },

Dans chaque version (de type ReleaseProgressionResource) de la Releases il y a un accessoire Deployments qui est de type Dictionary<string,IOrderedEnumerable<DashboardItemResource>>. Cependant, il semble que le client (qui a été fait pour consommer cette API) ne peut pas sérialiser cela. À partir du message d'exception, il semble que le client essaie d'analyser cela en tant que tableau JSON.

Voici un échantillon Deployments partie de la réponse du point final dans JSON brut (avec des données factices):

"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" 
      } 
     } 
} 

Est-ce que quelqu'un a des idées ce qui pourrait se produire/ce que je pourrais faire mal? Merci d'avance.

Répondre

0

Est-ce l'objet Déploiement complet? Les objets JSON doivent être placés entre parenthèses.

{ 
    "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" 
      } 
     } 
    } 
} 
+0

Non c'est juste la partie où il échoue à sérialiser. C'est une partie d'une structure plus grande. Je récupère 'ProgressionResource', qui a une collection de' ReleaseProgressionResources' qui a entre autres ce dictionnaire 'Deployments' qui ne peut pas être désérialisé, car le deserializer essaie de l'analyser comme un objet avec une propriété nommée' Environments-1' à la place de dict. – valorl