如何从LuisResult对象获取实体的值? (LUIS与Bot Framework .NET)

时间:2018-06-05 13:48:29

标签: c# .net botframework bots luis

当我调用LUIS api端点时,下面是JSON。

  {
        "query": "How do I install citrix?",
        "topScoringIntent": {
            "intent": "Setup Instructions",
            "score": 0.9999997
        },
        "intents": [
            {
                "intent": "Setup Instructions",
                "score": 0.9999997
            },
            {
                "intent": "OS Availability",
                "score": 0.0000021111066
            },
            {
                "intent": "Service Guide",
                "score": 8.18181149e-7
            },
            {
                "intent": "Service Description",
                "score": 5.55555232e-7
            },
            {
                "intent": "None",
                "score": 9e-9
            },
            {
                "intent": "Greeting",
                "score": 1.41666667e-9
            },
            {
                "intent": "Compassion",
                "score": 8.1e-10
            },
            {
                "intent": "Images",
                "score": 8.1e-10
            }
        ],
        "entities": [
            {
                "entity": "citrix",
                "type": "Service",
                "startIndex": 17,
                "endIndex": 22,
                "resolution": {
                    "values": [
                        "Citrix Receiver"
                    ]
                },
                "role": ""
            }
        ],
        "sentimentAnalysis": {
            "label": "positive",
            "score": 0.7695234
        }
    }

我正在尝试从下面获取字符串“Citrix Receiver”。

以下是我的代码

LuisResult result
var strEntity = result.Entities[0].Resolution.Values[0]

但我无法将索引应用于ICollection<object>类型的表达式。看起来resolution被定义为字典,经过研究,我看到其他JSON实体resolution具有多个键值对。是否有可能身体发生了变化,但MS Bot Builder Framework中的Luis扩展还没有?

感谢。

1 个答案:

答案 0 :(得分:4)

我以前遇到过相同的问题,无法获得已解析的实体列表,我使用以下代码解决了这个问题:

result.Entities.First().Resolution.Values.Select(s => JArray.Parse(s.ToString()).Distinct().ToList();

所以对你来说它可能会更短一些:

result.Entities.First().Resolution.Values.First(s => JArray.Parse(s.ToString());