我想使用自适应卡设计器创建(然后编辑)自适应卡设计,并在我的机器人中使用它们.
1)我在Designer中创建了自适应卡,带有样本值,并复制了它的JSON表示.例如:
{
"type": "AdaptiveCard",
"body": [
{
"type": "FactSet",
"id": "myFactSet",
"facts": [
{
"title": "Name:",
"value": "John Doe"
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.0"
}
Run Code Online (Sandbox Code Playgroud)
2)现在我想在我的C#Bot Framework机器人中使用这张卡的设计.我把这个JSON放到我的项目中,其中包含了AdaptiveCards v1.1.0 nuget包.
3)我用这行代码将卡JSON解析为AdaptiveCards库类:
var card = AdaptiveCard.FromJson(card).Card;
Run Code Online (Sandbox Code Playgroud)
4)在将卡发送给用户之前,我必须用实际值填充它,替换样本数据.
如何"John Doe"使用真实用户名替换?什么是最简单的方法?(我已经写了一个扩展方法来获取AdaptiveElement它的id,所以我可以很容易地改变它的值.但请告诉我,如果有一个更简单的方法)
我如何克隆现有的AdaptiveElement并将其他值放入其中?例如,如果我想FactSet通过复制现有myFactSet的所有相同样式来添加另一个卡?AdaptiveElement没Clone()办法.
我希望能够使用Designer轻松编辑卡片的设计,但如果我用C#代码重写整张卡片,每次卡片的设计发生变化时我都要对其进行更改,我不会看到设计师的结果.
我知道用javascript很容易做到,但我在我的机器人中使用C#.
我也明白,我可以解析卡片JsonObject并直接处理JsonObjects,克隆它们,改变它们的属性,但是
它们没有输入,因此没有IntelliSense支持,我可以输入错字
我仍然需要遍历所有元素以找到具有给定id的那个元素(顺便说一句,是否有一个扩展方法可以轻松地执行此操作?)
使用JsonObject不会消除AdaptiveCards库的需要和调用AdaptiveCard.FromJson(card) …
如何替换此代码:
string name = "John";
logger.Information("length of name '{name}' is {nameLength}", name, name.Length);
Run Code Online (Sandbox Code Playgroud)
像这样或类似的 C# 字符串插值
string name = "John";
// :-( lost benefit of structured logging: property names not passed to logger
logger.Information($"length of name '{name}' is {name.Length}");
Run Code Online (Sandbox Code Playgroud)
但保持结构化日志的属性名称工作?
我有一组需要TextBox在页面上填充一组内容的项目.每次用户单击另一个项目时,我想从最后一个项目中删除旧绑定,并为当前项目设置新绑定.如果我不这样做,The object is immutable则抛出WinRT 异常.
此代码在选择第一个项目时有效,但在下一个项目选择时抛出异常.
titleBinding.Source = selectedItem;
TitleBox.SetBinding(TextBox.ValueProperty, _titleBinding);
Run Code Online (Sandbox Code Playgroud)