0
我有一個LUIS對話框,它成功檢測到這個意圖並調用指定的子對話框。LuisResult沒有標記爲可序列化
[Serializable]
[LuisModel("xxxxxxxxxxxx", "xxxxxxxxxxxxxxxx")]
public class RootDialog : LuisDialog<object>
{
[LuisIntent("ApplyJob")]
public async Task Search(IDialogContext context, IAwaitable<IMessageActivity> activity,LuisResult result)
{
await context.PostAsync("Lets apply for a job");
context.Call(new ApplyJobDialog(result), ApplyJobComplete);
}
private async Task ApplyJobComplete(IDialogContext context, IAwaitable<object> result)
{
context.Done(await result);
}
}
我將LuisResult傳遞給子對話框。 (所以,我可以在子對話框中提取一些實體 - 下面的代碼未實現)
我的孩子對話是這樣的
[Serializable]
public class ApplyJobDialog: IDialog<object>
{
public LuisResult LuisResult { get; set; }
internal ApplyJobDialog(LuisResult result)
{
LuisResult = result;
}
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("hello");
context.Wait(AfterComplete);
}
private async Task AfterComplete(IDialogContext context, IAwaitable<IMessageActivity> result)
{
context.Done("");
}
}
它顯示「你好」向user.But那麼它拋出異常。 (模擬器中顯示),即使沒有使用過「LuisResult」
Exception: Type ‘Microsoft.Bot.Builder.Luis.Models.LuisResult’ in Assembly ‘Microsoft.Bot.Builder,
Version=3.11.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ is not marked as serializable.
[File of type 'text/plain']
但是,如果我不調用「AfterComplete」,它不會拋出異常。
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("hello");
//context.Wait(AfterComplete);
context.Done("");
}
我在做什麼錯在這裏。我如何調用ResumeAfter方法(如AfterComplete)並繼續進行對話?
你是對的。我提取了RootDialog中的實體,它工作。謝謝。 –