|
For example, in json we can do this: using System.Text.Json.Serialization;
[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")]
[JsonDerivedType(typeof(PlayerLevelUpEvent), typeDiscriminator: "PlayerLevelUp")]
[JsonDerivedType(typeof(SystemBroadcastEvent), typeDiscriminator: "SystemBroadcast")]
public abstract record GameEvent;
public record PlayerLevelUpEvent(uint player_id, byte new_level) : GameEvent;
public record SystemBroadcastEvent(string message) : GameEvent;Then I can deserialize from this: [
{
"type": "PlayerLevelUp", // every object has a "type"
"player_id": 1001,
"new_level": 5
},
{
"type": "SystemBroadcast",
"message": "Hello..."
}
]And handle this event: public void HandleEvent(List<GameEvent> gameEvents) {
foreach (var gamEvent in gamEvents) {
switch (gameEvent) {
case PlayerLevelUpEvent levelUp:
Console.WriteLine($"Player {levelUp.player_id} Level Up {levelUp.new_level}");
break;
case SystemBroadcastEvent broadcast:
Console.WriteLine($"Broadcast: {broadcast.message}");
break;
}
}
} |
Answered by
AArnott
Jun 12, 2026
Replies: 1 comment
Answer selected by
TheCGDF
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Yes. See the doc on union types.