MessageComponent: Add better json type exception (#3176)

Currently in MessageComponentConverter, the error on unknown type is
System.ArgumentNullException: Value cannot be null. (Parameter 'target')

This is because PopulateObject() doesn't allow a null target, but we
don't have a default case on the switch statement.
This commit is contained in:
Adam Gauthier
2025-08-14 00:44:01 -07:00
committed by GitHub
parent ebc7db8601
commit ae6e7d50b3

View File

@@ -1,7 +1,6 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.ComponentModel;
namespace Discord.Net.Converters namespace Discord.Net.Converters
{ {
@@ -21,8 +20,10 @@ namespace Discord.Net.Converters
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{ {
var jsonObject = JObject.Load(reader); var jsonObject = JObject.Load(reader);
var messageComponent = default(IMessageComponent); var typeProperty = jsonObject["type"].Value<int>();
switch ((ComponentType)jsonObject["type"].Value<int>())
IMessageComponent messageComponent;
switch ((ComponentType)typeProperty)
{ {
case ComponentType.ActionRow: case ComponentType.ActionRow:
messageComponent = new API.ActionRowComponent(); messageComponent = new API.ActionRowComponent();
@@ -61,6 +62,8 @@ namespace Discord.Net.Converters
case ComponentType.Container: case ComponentType.Container:
messageComponent = new API.ContainerComponent(); messageComponent = new API.ContainerComponent();
break; break;
default:
throw new JsonSerializationException($"Unknown component type value '{typeProperty}' while deserializing message component");
} }
serializer.Populate(jsonObject.CreateReader(), messageComponent); serializer.Populate(jsonObject.CreateReader(), messageComponent);
return messageComponent; return messageComponent;