Chr*_*hew 1 c# asp.net json botframework azure-language-understanding
通过 azure 构建的示例机器人基于此文档
我正在尝试重构对话框的部分功能,我需要访问我认为应该从 luis 调用返回的部分 json。但是,当我尝试从 $instance 访问时,出现错误,提示我无法访问响应的子元素。
这是json的一个例子:
+ Entities {{
"$instance": {
"To": [
{
"startIndex": 10,
"endIndex": 15,
"text": "paris",
"type": "To",
"score": 0.987954
}
]
},
"To": [
{
"$instance": {
"Airport": [
{
"startIndex": 10,
"endIndex": 15,
"text": "paris",
"type": "Airport"
}
]
},
"Airport": [
[
"Paris"
]
]
}
]
}} Newtonsoft.Json.Linq.JObject
Run Code Online (Sandbox Code Playgroud)
这是访问json的代码:
+ Entities {{
"$instance": {
"To": [
{
"startIndex": 10,
"endIndex": 15,
"text": "paris",
"type": "To",
"score": 0.987954
}
]
},
"To": [
{
"$instance": {
"Airport": [
{
"startIndex": 10,
"endIndex": 15,
"text": "paris",
"type": "Airport"
}
]
},
"Airport": [
[
"Paris"
]
]
}
]
}} Newtonsoft.Json.Linq.JObject
Run Code Online (Sandbox Code Playgroud)
我了解这如何从 luis.ai 调用访问实体,但如何访问 json 响应的其他部分?
同样,是否有一种方法可以访问实体是否返回了一般的意图,例如布尔值响应?
最后,一般通过上述方法访问 json 似乎并不理想。有没有更格式化的方式来访问 json 返回的内容,并且使用新的 asp.net core 2+ 有没有办法在不使用 newtonsoft 的情况下做到这一点?
您是正确的,通过上述方法访问 JSON 并不理想。我会使用QuickType 之类的工具从 JSON 创建一个类,或者至少是您可以调整的类的基础。然后,您可以使用 NewtonSoft JSON 库(或其他 JSON 库,因为您不想使用 NewtonSoft)将 JSON反序列化为一个对象并访问该对象的 Score 属性。
或者,如您链接的指南所示,您可以从GetTopScoringIntent方法调用中获取分数。
关于检查是否返回任何实体,您可以将 200 响应下LUIS API 参考页面上显示的 JSON插入我上面链接的快速类型工具以创建一个类,然后检查Entities集合以查看它是否有任何项目 - 您可以使用LINQs.Any()方法。
编辑
OP 最终使用LUISGen输出一个类来反序列化来自 LUIS API 的响应。
dotnet tool install -g LUISGen
LUISGen <exported-luis-app>.json -cs ClassToGenerate -o
Run Code Online (Sandbox Code Playgroud)
var result = recognizer.Recognize<ClassToGenerate>("<user-input-text>", CancellationToken.None);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |