From bb52930f4f8067655962af223b768356ed1eb54b Mon Sep 17 00:00:00 2001 From: "Sindre G. Langhus" Date: Tue, 27 Dec 2016 19:05:48 +0100 Subject: [PATCH] Added an API.Image if statement to DiscordContractResolver, and rewrote ImageConverter to work with Optional --- .../Net/Converters/DiscordContractResolver.cs | 29 ++++++++++++------- .../Net/Converters/ImageConverter.cs | 2 +- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/Discord.Net.Core/Net/Converters/DiscordContractResolver.cs b/src/Discord.Net.Core/Net/Converters/DiscordContractResolver.cs index 3357932d4..e78fe032d 100644 --- a/src/Discord.Net.Core/Net/Converters/DiscordContractResolver.cs +++ b/src/Discord.Net.Core/Net/Converters/DiscordContractResolver.cs @@ -28,16 +28,25 @@ namespace Discord.Net.Converters if (genericType == typeof(Optional<>)) { - var typeInput = propInfo.DeclaringType; - var innerTypeOutput = type.GenericTypeArguments[0]; - - var getter = typeof(Func<,>).MakeGenericType(typeInput, type); - var getterDelegate = propInfo.GetMethod.CreateDelegate(getter); - var shouldSerialize = _shouldSerialize.MakeGenericMethod(typeInput, innerTypeOutput); - var shouldSerializeDelegate = (Func)shouldSerialize.CreateDelegate(typeof(Func)); - property.ShouldSerialize = x => shouldSerializeDelegate(x, getterDelegate); - - converter = MakeGenericConverter(propInfo, typeof(OptionalConverter<>), innerTypeOutput); + if (type == typeof(Optional)) + { + converter = ImageConverter.Instance; + } + else + { + var typeInput = propInfo.DeclaringType; + var innerTypeOutput = type.GenericTypeArguments[0]; + + var getter = typeof(Func<,>).MakeGenericType(typeInput, type); + var getterDelegate = propInfo.GetMethod.CreateDelegate(getter); + var shouldSerialize = _shouldSerialize.MakeGenericMethod(typeInput, innerTypeOutput); + var shouldSerializeDelegate = + (Func) + shouldSerialize.CreateDelegate(typeof(Func)); + property.ShouldSerialize = x => shouldSerializeDelegate(x, getterDelegate); + + converter = MakeGenericConverter(propInfo, typeof(OptionalConverter<>), innerTypeOutput); + } } else converter = GetConverter(propInfo, type); diff --git a/src/Discord.Net.Core/Net/Converters/ImageConverter.cs b/src/Discord.Net.Core/Net/Converters/ImageConverter.cs index e82b7952b..8cdac09bb 100644 --- a/src/Discord.Net.Core/Net/Converters/ImageConverter.cs +++ b/src/Discord.Net.Core/Net/Converters/ImageConverter.cs @@ -20,7 +20,7 @@ namespace Discord.Net.Converters public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - var image = (Model)value; + var image = ((Optional)value).Value.Value; if (image.Stream != null) {