C# — Как десериализовать json из списка рабочих элементов Azure DevOps?

#c# #api #serialization #azure-devops #tfs-workitem

Вопрос:

Работа над извлечением рабочих элементов из Azure Devops:

Согласно этой статье, ответ выглядит так: https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work items/list?view=azure-devops-rest-6.0

 {
   "count": 2,
   "value": [
     {
       "id": 297,
       "rev": 1,
       "fields": {
          "System.AreaPath": "Fabrikam-Fiber-Git",
          "System.Title": "Customer can sign in using their Microsoft Account",
          ...
       }
     },
     {
       "id": 298,
       "rev": 1,
       "fields": {
          "System.AreaPath": "Fabrikam-Fiber-Git",
          "System.Title": "Customer can log out",
          ...
       }
     }
    ]
}
 

Я предполагаю, что объект для этого будет выглядеть примерно так:

 public class WorkItemModel
{
   public int id { get; set; }
   public int rev { get; set; }
   public FieldsModel fields { get; set; }
}

public class FieldsModel
{
   public string AreaPath { get; set; }
   public string Title { get; set; }
}
 

Но как мне десериализовать это в соответствующие объекты? И как работает «Система.AreaPath» и «Система.Название» справишься?

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

1. В Newtonsoft.Json , вы можете добавить JsonProperty атрибут в свойство, чтобы он выглядел так public class FieldsModel { [JsonProperty("System.AreaPath")] public string AreaPath {get; set;} ...

2. похоже, что доступны пакеты, содержащие необходимые вам модели: azure-devops

Ответ №1:

Вы можете создавать модели, как показано ниже:

 public class FieldsModel
{
    [JsonProperty("System.AreaPath")]
    public string SystemAreaPath { get; set; }

    [JsonProperty("System.Title")]
    public string SystemTitle { get; set; }
}

public class WorkItemModel
{
    public int id { get; set; }
    public int rev { get; set; }
    public FieldsModel fields { get; set; }
}

public class Root
{
    public int count { get; set; }
    public List<WorkItemModel> value { get; set; }
}

//using as below
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);