Exemplo n.º 1
0
        private Action <JsonSerializer> CompileAction(ModelTypeResolver modelTypeResolver)
        {
            Type modelBinderType;
            var  framework = RuntimeInformation.FrameworkDescription;

            if (framework.StartsWith(DotNetFramework))
            {
                modelBinderType = Assembly.GetExecutingAssembly()
                                  .GetType($"{GetType().Namespace}.{nameof(ModelSerializationBinderNetFramework)}");
            }
            else if (framework.StartsWith(DotNetCore))
            {
                modelBinderType = Assembly.GetExecutingAssembly()
                                  .GetType($"{GetType().Namespace}.{nameof(ModelSerializationBinderNetCore)}");
            }
            else
            {
                throw new NotSupportedException(
                          $"'Substitution of json serializer binder for the RavenDb isn't supported under '{framework}' framework.");
            }

            // Creates lambda expression delegate
            // (serializer) => serializer.Binder = new AppropriateSerializerBinder(serializer.Binder, modelTypeResolver)
            var p = Expression.Parameter(typeof(JsonSerializer));
            var binderProperty = Expression.Property(p, nameof(JsonSerializer.Binder));

            var binderSetter = Expression.Assign(binderProperty,
                                                 Expression.New(modelBinderType.GetConstructors().Single(),
                                                                binderProperty,
                                                                Expression.Constant(modelTypeResolver)));

            return(Expression.Lambda <Action <JsonSerializer> >(binderSetter, p).Compile());
        }
Exemplo n.º 2
0
        public ModelSerializationBinderSetter(ModelTypeResolver modelTypeResolver)
        {
            if (modelTypeResolver is null)
            {
                throw new ArgumentNullException(nameof(modelTypeResolver));
            }

            _setBinderAction = CompileAction(modelTypeResolver);
        }
Exemplo n.º 3
0
 public ModelSerializationBinderNetCore(SerializationBinder binder, ModelTypeResolver resolver)
 {
     _internalBinder = binder;
     _resolver       = resolver;
 }