You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#开发Teams动态Adaptive Card@用户渲染失败求助

Teams动态Adaptive Card用户提及渲染失败问题

我用C#开发Teams中支持用户提及的动态Adaptive Card,静态模板(含固定用户列表)能正常运行,但动态传入序列化后的用户数据时,内容完全无法显示。序列化后的JSON结构和静态数据一致,但渲染就是失效,求解决办法。


静态模板(可正常运行)

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0",
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "TextBlock",
      "$data": [
        { "name": "Matt" },
        { "name": "David" },
        { "name": "Thomas" }
      ],
      "text": "hi, <at>${name}</at>"
    }
  ],
  "msteams": {
    "entities": [
      {
        "type": "mention",
        "$data": [
          { "name": "Matt" },
          { "name": "David" },
          { "name": "Thomas" }
        ],
        "text": "<at>${name}</at>",
        "mentioned": {
          "id": "${name}",
          "name": "${name}"
        }
      }
    ]
  }
}

尝试的动态模板

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0",
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "TextBlock",
      "$data": ${user},
      "text": "hi, <at>${name}</at>"
    }
  ],
  "msteams": {
    "entities": [
      {
        "type": "mention",
        "$data": ${user},
        "text": "<at>${name}</at>",
        "mentioned": {
          "id": "${name}",
          "name": "${name}"
        }
      }
    ]
  }
}

C#序列化代码

List<MentionUser> userMentionList = new List<MentionUser>();
AdaptiveCardTemplate template = new AdaptiveCardTemplate(File.ReadAllText("Resources/Mention.json"));
var json = new List<MentionedList>();

foreach (var subscription in SubscriptionMentions)
{
    var element = new MentionUser
    {
        name = subscription,
    };
    userMentionList.Add(element);
}

json.Add(new MentionedList { instructions = userMentionList});
string jsonString = System.Text.Json.JsonSerializer.Serialize(json);
var data = new
{
    user = jsonString,
};
string cardJson = template.Expand("");
var card = SerializeCard(cardJson);

序列化后的JSON字符串

[{"name":"username"},{"name":"username"}]}]

问题排查与解决

  1. 核心问题:数据格式传递错误
    你现在把user字段赋值为序列化后的JSON字符串,模板渲染时会把它当成普通字符串处理,而不是JSON数组。Adaptive Card模板需要的是对象/数组类型的原始数据,不是字符串。

  2. 代码修正方案
    直接传递用户列表对象给模板,不需要手动序列化:

    List<MentionUser> userMentionList = new List<MentionUser>();
    AdaptiveCardTemplate template = new AdaptiveCardTemplate(File.ReadAllText("Resources/Mention.json"));
    
    foreach (var subscription in SubscriptionMentions)
    {
        var element = new MentionUser
        {
            name = subscription,
        };
        userMentionList.Add(element);
    }
    
    // 直接传递用户列表对象,无需转成字符串
    var data = new
    {
        user = userMentionList,
    };
    // 把data对象传入模板展开,不是空字符串
    string cardJson = template.Expand(data);
    var card = SerializeCard(cardJson);
    
  3. 额外修复点

    • 你提供的序列化后JSON有语法错误(多了一个}]),修正代码后会生成结构正确的JSON。
    • Teams的用户提及要求mentioned.id必须是用户的UPN或AAD ID,不能直接用用户名,否则无法正确触发提及提醒,建议替换为用户的实际标识。

内容的提问来源于stack exchange,提问作者Lele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:55:21