From 3e5193c3b7c7d92fa3716264f23d1ec311e2a4f2 Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 21 Jun 2016 05:37:07 -0300 Subject: [PATCH] Added Expressions dependency --- .../Net/Converters/DiscordContractResolver.cs | 16 ++++++---------- src/Discord.Net/project.json | 1 + 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Discord.Net/Net/Converters/DiscordContractResolver.cs b/src/Discord.Net/Net/Converters/DiscordContractResolver.cs index 4e3aba41e..99d75879f 100644 --- a/src/Discord.Net/Net/Converters/DiscordContractResolver.cs +++ b/src/Discord.Net/Net/Converters/DiscordContractResolver.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; +using System.Linq.Expressions; namespace Discord.Net.Converters { @@ -28,11 +29,11 @@ namespace Discord.Net.Converters 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); + var parentArg = Expression.Parameter(typeof(object)); + var optional = Expression.Property(Expression.Convert(parentArg, property.DeclaringType), member as PropertyInfo); + var isSpecified = Expression.Property(optional, "IsSpecified"); + var lambda = Expression.Lambda>(isSpecified, parentArg).Compile(); + property.ShouldSerialize = x => lambda(x); var converterType = typeof(OptionalConverter<>).MakeGenericType(innerTypeOutput).GetTypeInfo(); var instanceField = converterType.GetDeclaredField("Instance"); @@ -98,10 +99,5 @@ namespace Discord.Net.Converters return null; } - - private static bool ShouldSerialize(object owner, Delegate getter) - { - return (getter as Func>)((TOwner)owner).IsSpecified; - } } } diff --git a/src/Discord.Net/project.json b/src/Discord.Net/project.json index 7f202690e..b6daffdc4 100644 --- a/src/Discord.Net/project.json +++ b/src/Discord.Net/project.json @@ -25,6 +25,7 @@ "System.Collections.Immutable": "1.2.0-rc2-24027", "System.IO.Compression": "4.1.0-rc2-24027", "System.IO.FileSystem": "4.0.1-rc2-24027", + "System.Linq.Expressions": "4.0.11-rc2-24027", "System.Net.Http": "4.0.1-rc2-24027", "System.Net.WebSockets.Client": "4.0.0-rc2-24027", "System.Reflection.Extensions": "4.0.1-rc2-24027",