Как сохранить пользовательские поля из ответа Json atlassian, например (customfield_10020), который приходит динамически c каждый раз в c# - PullRequest
1 голос
/ 28 января 2020

Вот ответ, который я получаю от Api, который является Dynami c, как показано на рисунке. Я получил значение в ключе customfield_10011. В другом объекте вниз я получаю значение в ключе customfield_10014. Теперь, как мне это сделать oop и сохранить данные в c#?

ttps://i.stack.imgur.com/MufaD.png

Ответы [ 2 ]

2 голосов
/ 28 января 2020

У меня была похожая проблема с Jira API.

Если вы на 100% уверены, что эти пользовательские свойства не изменятся, то наверняка go динамический c маршрут.

Я интегрировался с несколькими экземплярами Jira, и у них были разные настраиваемые поля для одного и того же свойства, поэтому предпочтительным является более плавное отображение, поскольку это может быть выполнено динамически из некоторой конфигурации.

Это может быть достигнуто с помощью CustomContractResolver из JsonConvert.

Пример:

 return JsonConvert.DeserializeObject<JiraIssuePayload>(str, new JsonSerializerSettings()
 {
     ContractResolver = new CustomContractResolver(new Dictionary<string, string>
     {
         {"EpicName", "customfield_10011" },
         {"Epic", "customfield_10012" }, // these could come from some configuration object
     });
 }

Здесь делается то, что вы говорите JsonConvert десериализовать customfield_10011 для свойства EpicName вашего типа ( и Epic для другого).

1 голос
/ 28 января 2020

Используя Json. Net, достаточно просто сериализовать его в Dynami c.

dynamic myDynamicJson = JsonConvert.DeserializeObject("{ 'environment': null, 'customfield_10027': "Multi Sensor Updated" }");

string customfield10027 = myDynamicJson.customfield_10027;

Редактировать

Чтобы получить поле имя из конфигурации я бы предпочел go для пользовательского метода распознавателя. Но если вы не можете:

dynamic myDynamicJson = JsonConvert.DeserializeObject("{ 'environment': null, 'customfield_10027': 'Multi Sensor Updated' }");
string myFieldNameFromConfig = "customfield_100273";

string result = myDynamicJson[myFieldNameFromConfig];
...