LuisResult 未标记为可序列化
LuisResult is not marked as serializable
我有一个 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("");
}
}
它向 user.But 显示 "hello" 然后它抛出异常。 (在模拟器中显示)即使不使用传递的 "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)并继续对话?
LuisResult
class 不可序列化,因此您不能在 ApplyJobDialog
中保存变量,因为对话框将尝试序列化。
您将必须传递可序列化的内容或提取 RootDialog
中的实体。
我有一个 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("");
}
}
它向 user.But 显示 "hello" 然后它抛出异常。 (在模拟器中显示)即使不使用传递的 "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)并继续对话?
LuisResult
class 不可序列化,因此您不能在 ApplyJobDialog
中保存变量,因为对话框将尝试序列化。
您将必须传递可序列化的内容或提取 RootDialog
中的实体。