【问题标题】:C# - How to only output one specific item from JSON-formatted string returned from an APIC# - 如何从 API 返回的 JSON 格式字符串中仅输出一个特定项目
【发布时间】:2020-03-19 10:33:52
【问题描述】:

我目前正在尝试使用 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,而且我还没有设法在网上找到任何东西来帮助解决我的问题 - 但如果有人已经有,请告诉我!

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

谢谢,

【问题讨论】:

  • 您必须修改服务器代码。如果您的客户端代码是 C#,为什么不从反序列化的 JSON 响应中提取 Predictions 值?
  • 创建表示json结构的类,将json解析为该类的q对象,并返回该对象的预测属性。使用 NewtonSoft.Json 将 json 解析为类对象。
  • 在这方面有更多的背景信息会很有帮助。大概你要对包含predictions 的字符串做些什么?一旦你有了它,你打算用那个字符串做什么?您是否打算解析它以提取更多信息?根据总体目标,答案可能会发生变化。

标签: c# json api microsoft-custom-vision


【解决方案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);

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 2014-11-17
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多