代码之家  ›  专栏  ›  技术社区  ›  Darshana Bandara

LuisResult未标记为可序列化

  •  0
  • Darshana Bandara  · 技术社区  · 7 年前

    我有一个LUIS对话框,它成功地检测到意图并调用指定的子对话框。

    [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("");
        }
    }
    

    它向用户显示“你好”。但它抛出了一个例外。(在emulator中显示)即使不使用传递的“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)并继续对话?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ezequiel Jadib    7 年前

    这个 LuisResult 类不可序列化,因此不能在 ApplyJobDialog ,因为对话框将尝试序列化。

    RootDialog .