C# - Как вывести только один указанный c элемент из JSON -форматированной строки, возвращенной из API - PullRequest
0 голосов
/ 19 марта 2020

В настоящее время я пытаюсь использовать C# для отправки изображения в мой API пользовательского прогнозирования зрения. Я новичок в C#, и у меня возникли некоторые проблемы после обучения, доступного на веб-сайте Microsoft Azure (https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/use-prediction-api#next -шаги ).

Этот урок заканчивается тем, что программа возвращает строку, отформатированную JSON, используя этот код:

byte[] byteData = GetImageAsByteArray(imageFilePath);

using (var content = new ByteArrayContent(byteData))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    response = await client.PostAsync(url, content);
    Console.WriteLine(await response.Content.ReadAsStringAsync());
}

Пример вывода:

{
  "Id": "7796df8e-acbc-45fc-90b4-1b0c81b73639",
  "Project": "8622c779-471c-4b6e-842c-67a11deffd7b",
  "Iteration": "59ec199d-f3fb-443a-b708-4bca79e1b7f7",
  "Created": "2019-03-20T16:47:31.322Z",
  "Predictions": [
    {
      "TagId": "d9cb3fa5-1ff3-4e98-8d47-2ef42d7fb373",
      "TagName": "cat",
      "Probability": 1
    },
    {
      "TagId": "9a8d63fb-b6ed-4462-bcff-77ff72084d99",
      "TagName": "dog",
      "Probability": 0.1087869
    }
  ]
}

Можно ли изменить код так, чтобы он возвращал только часть предсказаний массива? Я знаю, что будет решение, но, как я упоминал ранее, я очень плохо знаком с C#, никогда раньше не использовал JSON, и мне не удалось найти в Интернете ничего, что помогло бы решить мою проблему - но если у кого-то уже есть, пожалуйста, дайте мне знать!

Я надеюсь, что вы сможете помочь мне решить эту проблему!

Спасибо,

1 Ответ

1 голос
/ 19 марта 2020

Этот пример, который вы показываете, является просто клиентом. В идеале вам нужно адаптировать серверный код так, чтобы он выводил только то, что вам нужно, поскольку это также более эффективно.

Но если вы не можете этого сделать, то, к счастью, преобразователи JSON склонны игнорировать любые данные что они не требуют. Итак, вы можете десериализовать в упрощенный класс.

Итак, определите ваши классы по мере необходимости. Например,

public class Prediction
{
    public string TagId { get; set; }
    public string TagName { get; set; }
    public double Probability { get; set; }
}

public class RootObject
{
    public List<Prediction> Predictions { get; set; }
}

Затем десериализовать соответствующим образом. Например, с Newtonsoft

RootObject rootObj = JsonConvert.DeserializeObject<RootObject>(json);
...