Skip to content

Commit 4ff0e71

Browse files
committed
switch to custom convert
1 parent 495e7a6 commit 4ff0e71

File tree

2 files changed

+52
-8
lines changed

2 files changed

+52
-8
lines changed

src/SocketLabs.EventWebhooks.Extensions/Models/WebhookEventBase.cs

+10-8
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
namespace SocketLabs.EventWebhooks.Extensions.Models
44
{
5-
[JsonPolymorphic(TypeDiscriminatorPropertyName = nameof(Type))]
6-
[JsonDerivedType(typeof(EngagementEvent), typeDiscriminator: "Tracking")]
7-
[JsonDerivedType(typeof(ComplaintEvent), typeDiscriminator: "Complaint")]
8-
[JsonDerivedType(typeof(FailedEvent), typeDiscriminator: "Failed")]
9-
[JsonDerivedType(typeof(SentEvent), typeDiscriminator: "Delivered")]
10-
[JsonDerivedType(typeof(ValidationEvent), typeDiscriminator: "Validation")]
11-
[JsonDerivedType(typeof(QueuedEvent), typeDiscriminator: "Queued")]
12-
[JsonDerivedType(typeof(DeferredEvent), typeDiscriminator: "Deferred")]
5+
//[JsonPolymorphic(TypeDiscriminatorPropertyName = nameof(Type))]
6+
//[JsonDerivedType(typeof(EngagementEvent), typeDiscriminator: "Tracking")]
7+
//[JsonDerivedType(typeof(ComplaintEvent), typeDiscriminator: "Complaint")]
8+
//[JsonDerivedType(typeof(FailedEvent), typeDiscriminator: "Failed")]
9+
//[JsonDerivedType(typeof(SentEvent), typeDiscriminator: "Delivered")]
10+
//[JsonDerivedType(typeof(ValidationEvent), typeDiscriminator: "Validation")]
11+
//[JsonDerivedType(typeof(QueuedEvent), typeDiscriminator: "Queued")]
12+
//[JsonDerivedType(typeof(DeferredEvent), typeDiscriminator: "Deferred")]
13+
14+
[JsonConverter(typeof(WebhookEventConverter))]
1315
public abstract class WebhookEventBase
1416
{
1517
public string? Type { get; set; }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Text.Json;
2+
using System.Text.Json.Serialization;
3+
4+
namespace SocketLabs.EventWebhooks.Extensions.Models
5+
{
6+
internal class WebhookEventConverter : JsonConverter<WebhookEventBase>
7+
{
8+
public override WebhookEventBase? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
9+
{
10+
Utf8JsonReader readerClone = reader;
11+
12+
if (JsonDocument.TryParseValue(ref readerClone, out var document))
13+
{
14+
if (document.RootElement.TryGetProperty("Type", out var element))
15+
{
16+
var typeDiscriminator = element.GetString();
17+
18+
WebhookEventBase? webhookEvent = typeDiscriminator switch
19+
{
20+
"Complaint" => JsonSerializer.Deserialize<ComplaintEvent>(ref reader),
21+
"Deferred" => JsonSerializer.Deserialize<DeferredEvent>(ref reader),
22+
"Tracking" => JsonSerializer.Deserialize<EngagementEvent>(ref reader),
23+
"Failed" => JsonSerializer.Deserialize<FailedEvent>(ref reader),
24+
"Queued" => JsonSerializer.Deserialize<QueuedEvent>(ref reader),
25+
"Delivered" => JsonSerializer.Deserialize<SentEvent>(ref reader),
26+
"Validation" => JsonSerializer.Deserialize<ValidationEvent>(ref reader),
27+
_ => throw new JsonException("Unknown event type")
28+
};
29+
30+
return webhookEvent;
31+
}
32+
}
33+
34+
throw new JsonException();
35+
}
36+
37+
public override void Write(Utf8JsonWriter writer, WebhookEventBase value, JsonSerializerOptions options)
38+
{
39+
JsonSerializer.Serialize(writer, value, options);
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)