microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
docs/update-release-process

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Api/Activities/Invokes/AdaptiveCardActivity.cs

71lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4using System.Text.Json;
5using System.Text.Json.Serialization;
6
7using Microsoft.Teams.Common;
8
9namespace Microsoft.Teams.Api.Activities.Invokes;
10
11public partial class Name : StringEnum
12{
13 public bool IsAdaptiveCard => Value.StartsWith("adaptiveCard/");
14}
15
16/// <summary>
17/// Any AdaptiveCard Activity
18/// </summary>
19[JsonConverter(typeof(JsonConverter))]
20public class AdaptiveCardActivity(Name.AdaptiveCards name) : InvokeActivity(new(name.Value))
21{
22 public AdaptiveCards.ActionActivity ToAction() => (AdaptiveCards.ActionActivity)this;
23
24 public override object ToType(Type type, IFormatProvider? provider)
25 {
26 if (type == typeof(AdaptiveCards.ActionActivity)) return ToAction();
27 return this;
28 }
29
30 public new class JsonConverter : JsonConverter<AdaptiveCardActivity>
31 {
32 public override bool CanConvert(Type typeToConvert)
33 {
34 return base.CanConvert(typeToConvert);
35 }
36
37 public override AdaptiveCardActivity? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
38 {
39 var element = JsonSerializer.Deserialize<JsonElement>(ref reader, options);
40
41 if (!element.TryGetProperty("name", out JsonElement property))
42 {
43 throw new JsonException("invoke activity must have a 'name' property");
44 }
45
46 var name = property.Deserialize<string>(options);
47
48 if (name is null)
49 {
50 throw new JsonException("failed to deserialize invoke activity 'name' property");
51 }
52
53 return name switch
54 {
55 "adaptiveCard/action" => JsonSerializer.Deserialize<AdaptiveCards.ActionActivity>(element.ToString(), options),
56 _ => throw new JsonException($"failed to deserialize adaptive card activity '{name}' doesn't match any known types.")
57 };
58 }
59
60 public override void Write(Utf8JsonWriter writer, AdaptiveCardActivity value, JsonSerializerOptions options)
61 {
62 if (value is AdaptiveCards.ActionActivity action)
63 {
64 JsonSerializer.Serialize(writer, action, options);
65 return;
66 }
67
68 JsonSerializer.Serialize(writer, value, options);
69 }
70 }
71}