【问题标题】:How to get only "intent" field from LUIS returned JSON result using C#如何使用 C# 从 LUIS 返回的 JSON 结果中仅获取“意图”字段
【发布时间】:2017-10-15 10:19:24
【问题描述】:

如何从 C# 中的 LUIS 返回结果的 JSON 格式代码中仅获取“意图”字段? 我已经完成了这样的反序列化:

public class ResponseContent
{
    [BsonId]
    public string query { get; set; }
    public string topScoringIntent { get; set; }
    public string intent { get; set; }
    public string entities { get; set; }
}

public class topScoringIntent
{
    public string intent { get; set; }
    public string score { get; set; }
}

这是 LUIS 返回结果:

"query": "Hello.",
"topScoringIntent": 
{
"intent": "Greeting",
"score": 0.9447609
},
"intents": 
[
{
  "intent": "Greeting",
  "score": 0.9447609
},
{
  "intent": "Request",
  "score": 0.09726282
},
{
  "intent": "None",
  "score": 5.523394E-10
}
],
"entities": []

我只想要“TopScoringIntent”中的“intent”字段。我怎样才能使用 C# 获得它?以下是我尝试过的代码,但没有任何结果:

var uri = "https://southeastasia.api.cognitive.microsoft.com/luis/v2.0/apps/" + luisAppId + "?" + queryString;
var response = await client.GetAsync(uri);
var responseContent = await response.Content.ReadAsStringAsync();
var responseitem = JsonConvert.SerializeObject(responseContent,Formatting.Indented);
JToken content = JToken.Parse(responseitem);
var intentOnly = (from s in content.Children()["ResponseContent"]select s).ToList();
foreach (var item in intentOnly.Children().ToList())
{
  Console.WriteLine(item.ToObject<ResponseContent>().TopScoringIntent);
}

这不是机器人,所以我没有使用任何机器人框架来执行此操作。 谢谢。

【问题讨论】:

  • 调试它,看看“内容”对象的格式,你会注意到如何查询它。

标签: c# json azure-language-understanding


【解决方案1】:

使用以下代码完成:

var jsonresponse = JObject.Parse(responseContent);
intentonly = jsonresponse.SelectToken("intents[0].intent").ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2013-09-27
    • 2016-03-21
    • 1970-01-01
    • 2014-11-09
    • 2017-01-06
    相关资源
    最近更新 更多