В Луисе я создал простой шаблон с простой сущностью, такой как:
list bots {Name}
, где «Имя» - это моя сущность, которую я хотел бы получить в C#. Шаблон и намерение работают нормально, и я получаю это правильно.
Я следую официальному примеру и создал класс IRecognizerConvert, чтобы я мог десериализовать результат. Он просто десериализует намерение, но не может десериализовать сущность.
В подклассе _Entities у меня есть только переменная "Name", которую я пытаюсь десериализовать, и ничего больше. У меня нет другого частичного класса.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Newtonsoft.Json;
using Microsoft.Bot.Builder.AI.Luis;
namespace EmptyBot1.Models
{
public class ChatbotIntent : IRecognizerConvert
{
public string Text;
public string AlteredText;
public enum Intent
{
CreateBot,
ListBots,
ListAllBots,
RunBot,
Cancel,
Greet,
None
};
public Dictionary<Intent, IntentScore> Intents;
public class _Entities
{
public string Name;
}
public _Entities Entities;
[JsonExtensionData(ReadData = true, WriteData = true)]
public IDictionary<string, object> Properties { get; set; }
public void Convert(dynamic result)
{
var _result = JsonConvert.DeserializeObject<ChatbotIntent>(JsonConvert.SerializeObject(result, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
Text = _result.Text;
AlteredText = _result.AlteredText;
Intents = _result.Intents;
Entities = _result.Entities;
Properties = _result.Properties;
}
public (Intent intent, double score) TopIntent()
{
Intent maxIntent = Intent.None;
var max = 0.0;
foreach (var entry in Intents)
{
if (entry.Value.Score > max)
{
maxIntent = entry.Key;
max = entry.Value.Score.Value;
}
}
return (maxIntent, max);
}
}
}
В предыдущем фрагменте важной частью является класс _Entities, который определяет, как выглядят сущности, возвращающиеся из Луиса. Так как у меня есть только 1 простая строковая сущность «Имя», я подумал, что этого достаточно.
public class _Entities
{
public string Name;
}
Однако, когда я запускаю его, я даю ему следующее высказывание:
"list bots mybots"
Луис будет правильно назначать Name = "mybots" и получит правильное намерение, но в строке JsonConvert.DeserializeObject указано sh, говорящее о неправильном формате json. Я предполагаю, что это жалуется на класс, который я сделал? А не фактический JSON результат от luis?
Что мне нужно добавить в класс _Entities, чтобы сущность luis могла быть успешно десериализирована?