microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
dev

Branches

Tags

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

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Api/Entities/MessageEntity.cs

73lines · modeblame

82a4e3c3Rajan1 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
73e7847aAlex Acebo1 years ago4using System.Text.Json;
5using System.Text.Json.Serialization;
6
7namespace Microsoft.Teams.Api.Entities;
8
9[JsonConverter(typeof(IMessageJsonConverter))]
10public interface IMessageEntity : IEntity
11{
12[JsonPropertyName("additionalType")]
13[JsonPropertyOrder(10)]
14public IList<string>? AdditionalType { get; set; }
15
16public class IMessageJsonConverter : JsonConverter<IMessageEntity>
17{
18public override bool CanConvert(Type typeToConvert)
19{
20return base.CanConvert(typeToConvert);
21}
22
23public override IMessageEntity? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
24{
25var element = JsonSerializer.Deserialize<JsonElement>(ref reader, options);
26
27if (!element.TryGetProperty("type", out JsonElement property))
28{
29throw new JsonException("entity must have a 'type' property");
30}
31
32var type = property.Deserialize<string>(options);
33
f3c0dad5Alex Acebo1 years ago34if (type is null)
73e7847aAlex Acebo1 years ago35{
36throw new JsonException("failed to deserialize entity 'type' property");
37}
38
39return type switch
40{
41"message" => JsonSerializer.Deserialize<MessageEntity>(element.ToString(), options),
42"https://schema.org/Message" => JsonSerializer.Deserialize<OMessageEntity>(element.ToString(), options),
43_ => throw new JsonException($"entity type '{type}' is not supported")
44};
45}
46
47public override void Write(Utf8JsonWriter writer, IMessageEntity value, JsonSerializerOptions options)
48{
49if (value is MessageEntity message)
50{
51JsonSerializer.Serialize(writer, message, options);
52return;
53}
54
55if (value is OMessageEntity oMessage)
56{
57JsonSerializer.Serialize(writer, oMessage, options);
58return;
59}
60
61JsonSerializer.Serialize(writer, value, options);
62}
63}
64}
65
66public class MessageEntity : Entity, IMessageEntity
67{
68[JsonPropertyName("additionalType")]
69[JsonPropertyOrder(10)]
70public IList<string>? AdditionalType { get; set; }
71
72public MessageEntity() : base("message") { }
73}