【发布时间】:2017-07-27 00:29:02
【问题描述】:
我正在尝试在 Bot Framework 中的两个对话框之间传递 IList<Attachment> 类型的对象。这是我的代码现在的样子:
主对话框:
[Serializable]
public class CarouselCardsDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(this.MessageReceivedAsync);
}
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
//This object, 'attachments' is what I need to pass to the child dialog.
IList<Attachment> attachments = GetCardsAttachments();
context.Call(new CarouselDialog(attachments), ResumeAfterPrompt);
}
private async Task ResumeAfterPrompt(IDialogContext context, IAwaitable<string> result)
{
string input = await result;
await context.PostAsync(input);
context.Wait(MessageReceivedAsync);
}
private static IList<Attachment> GetCardsAttachments()
{
//Get a list of attachment
}
}
这是子对话框。我想将 CarouselCardsDialog 中的附件列表传递给这个对象:
[Serializable]
public class CarouselDialog : IDialog<string>
{
private IList<Attachment> _attachments;
public CarouselDialog(IList<Attachment> attachments)
{
_attachments = attachments;
}
public async Task StartAsync(IDialogContext context)
{
IMessageActivity reply = context.MakeMessage();
reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
reply.Attachments = _attachments;
await context.PostAsync(reply);
context.Wait(MessageReceivedAsync);
}
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
IMessageActivity activity = await result;
context.Done(activity.Text);
}
}
但是,当我运行此代码时,我收到此错误:
例外:在程序集中键入“Microsoft.Bot.Connector.Attachment” 'Microsoft.Bot.Connector,版本=3.5.1.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 未标记为可序列化。
我做错了什么?有没有办法解决这个问题?
【问题讨论】:
-
错误消息使您的“附件”类听起来需要 [Serializable],否则依赖它的类也不会。
-
@CSmith 感谢您的意见。问题是 Attachment 类属于框架,所以我认为改变它并不实用。你知道这样的事情是否有解决方法吗?
-
您可以创建自己的类,将其标记为可序列化并使用附件类中您感兴趣的值填充它..
标签: c# bots botframework