我有一个机器人,它使用内置渠道以及DirectLine自定义渠道。
在DirectLine通道中,我得到了响应活动,并且试图从Attachments
中提取信息,以便可以将其转换为自定义通道格式。
在解析活动时,我检查附件,发现附件位于"ContentType" = "application/vnd.microsoft.card.hero"
上,然后尝试将附件Content
投射为HeroCard
。这在DirectLine通道中不起作用。在内置通道的单元测试中,我能够执行此操作,并正确验证我的所有数据。
这不是预期的行为吗?如何在DirectLine频道中获取附件的内容?
var type = attachment.ContentType;
if (type == "application/vnd.microsoft.card.hero")
{
var temp = attachment.Content;
var heroCard = temp as HeroCard; // This yields a 'null'
...
}
注意:如果我替换行“ var heroCard = temp as HeroCard;”与
var temp = JsonConvert.SerializeObject(attachment.Content);
var heroCard = JsonConvert.DeserializeObject<HeroCard>(temp);
然后我有一张可以分析的英雄卡。但这似乎效率很低。
答案 0 :(得分:1)
DirectLine频道意味着您必须手动进行大部分对话, 而其他内置通道则内置了连接器,因此转换是在后台自动完成的。
您可以通过不先进行序列化来更好地优化当前代码,即:
var heroCard = JsonConvert.DeserializeObject<HeroCard>(attachment.Content.ToString());
但是除此之外,我知道您没有其他方法可以优化转换为强类型。