-1

我目前正在尝试使用 C# 将图像提交到我的自定义视觉预测 API。我是 C# 新手,按照 Microsoft Azure 网站上提供的教程(https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/use-prediction -api#next-steps)。

本教程以程序使用以下代码返回 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,而且我还没有设法在网上找到任何东西来帮助解决我的问题 - 但如果有人已经有, 请告诉我!

我希望你能帮我解决这个问题!

谢谢,

4

1 回答 1

1

你展示的这个例子只是客户端。理想情况下,您需要调整服务器代码以仅输出您需要的内容,因为这也更有效。

但是如果你不能这样做,那么幸运的是,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);
于 2020-03-19T10:54:09.253 回答