Browse Source

Added Expressions dependency

pull/108/head
RogueException 9 years ago
parent
commit
3e5193c3b7
2 changed files with 7 additions and 10 deletions
  1. +6
    -10
      src/Discord.Net/Net/Converters/DiscordContractResolver.cs
  2. +1
    -0
      src/Discord.Net/project.json

+ 6
- 10
src/Discord.Net/Net/Converters/DiscordContractResolver.cs View File

@@ -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<object, Delegate, bool>)shouldSerialize.CreateDelegate(typeof(Func<object, Delegate, bool>));
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<Func<object, bool>>(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<TOwner, TValue>(object owner, Delegate getter)
{
return (getter as Func<TOwner, Optional<TValue>>)((TOwner)owner).IsSpecified;
}
}
}

+ 1
- 0
src/Discord.Net/project.json View File

@@ -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",


Loading…
Cancel
Save