public static Expression DeserializeLinqExpression(string expressionString)
        {
            var serializer = new ExpressionSerializer(new JsonSerializer());
            var expression = serializer.DeserializeText(expressionString);

            return(expression);
        }
Example #2
0
        private static void DoSerializeThenDeserialize <T>(Expression <Func <T, bool> > predicate)
        {
            var expressionSerializer = new ExpressionSerializer(new JsonSerializer());
            var serialized           = expressionSerializer.SerializeText(predicate);

            expressionSerializer.DeserializeText(serialized);
        }
Example #3
0
        public void SerializeLambdaWithNullableTest()
        {
            foreach (var textSerializer in new ITextSerializer[] { new JsonSerializer(), new XmlSerializer() })
            {
                var serializer = new ExpressionSerializer(textSerializer);
                var fish       = new[]
                {
                    new Fish {
                        Count = 0
                    },
                    new Fish {
                        Count = 1
                    },
                    new Fish(),
                    new Fish {
                        Count = 1
                    }
                };
                int?count = 1;
                Expression <Func <Fish, bool> > expectedExpression = f => f.Count == count;
                var expected = fish.Where(expectedExpression.Compile()).Count();

                var serialized       = serializer.SerializeText(expectedExpression);
                var actualExpression = (Expression <Func <Fish, bool> >)serializer.DeserializeText(serialized);
                var actual           = fish.Where(actualExpression.Compile()).Count();

                Assert.AreEqual(expected, actual);
            }
        }
        internal static ExpressionSerializer NewExpressionSerializer(params Type[] knownTypes)
        {
            var expressionSerializer = new ExpressionSerializer(JsonSerializer);

            expressionSerializer.AddKnownType(typeof(StringSplitOptions));  // TODO: Have this come in from above
            return(expressionSerializer);
        }
        public override void Deserialize(IDeserializer deserializer)
        {
            base.Deserialize(deserializer);
            var expression = new ExpressionSerializer(new BinarySerializer()).Deserialize(new MemoryStream(deserializer.ReadByteArray()));

            SetExpression(expression);
        }
Example #6
0
        private void TestExpression(Expression <Func <Test, bool> > expression, ReadFieldOn readFieldOn)
        {
            var initialValue = 42;
            var actualValue  = -1;

            // Initialize fields
            SetFields(initialValue);

            // Serialize expression
            var settings = new FactorySettings
            {
                AllowPrivateFieldAccess = true
            };
            var serializer = new ExpressionSerializer(new JsonSerializer());
            var value      = serializer.SerializeText(expression, settings);

            // Modify fields
            SetFields(actualValue);

            // Deserialize expression
            var actualExpression = (Expression <Func <Test, bool> >)serializer.DeserializeText(value, new ExpressionContext {
                AllowPrivateFieldAccess = true
            });
            var func = actualExpression.Compile();

            // Set expected value.
            int expectedValue = readFieldOn == ReadFieldOn.Serialization
                ? initialValue
                : actualValue;

            // Assert
            Assert.IsTrue(func(new Test {
                IntProperty = expectedValue
            }));
        }
        public void Test12()
        {
            Order order1 = new Order {
                Customer = Hans, ID = 302, Freight = 2001.99m, OrderDate = DateTime.Now.AddMonths(-20)
            };

            var assemblies = new Assembly[] { typeof(Order).Assembly, typeof(UnitTests).Assembly, typeof(ExpressionType).Assembly, typeof(IQueryable).Assembly };
            var resolver   = new ExpressionSerializationTypeResolver(assemblies, new Type[] { typeof(Customer), typeof(Order), typeof(Product), typeof(Supplier), typeof(Shipper) });
            ExpressionSerializer serializer = new ExpressionSerializer(resolver);

            IEnumerable <Customer> customers = GetCustomers().ToArray();
            Expression <Func <int, IEnumerable <Order[]> > > e12 =
                n =>
                from c in customers //instance == null : IEnumerable.Where/.Select
                where c.ID < n
                select c.Orders.ToArray();

            e12 = (Expression <Func <int, IEnumerable <Order[]> > >)ObjectServices.Evaluator.PartialEval(e12);
            MethodCallExpression m1        = ((MethodCallExpression)e12.Body).Arguments[0] as MethodCallExpression;
            ConstantExpression   cx        = ((ConstantExpression)m1.Arguments[0]);
            LambdaExpression     lambdaarg = ((LambdaExpression)m1.Arguments[1]);
            //Expression arg1 = ((MethodCallExpression)e12.Body).Arguments[1];
            XElement xml12 = serializer.Serialize(e12);

            Expression result12 = serializer.Deserialize(xml12);

            Assert.AreEqual(e12.ToString(), result12.ToString());
            Console.WriteLine(((result12 as Expression <Func <int, IEnumerable <Order[]> > >).Compile())(5));
        }
Example #8
0
        /// <summary>
        /// Reads out the expression from a BinaryReader.
        /// </summary>
        /// <param name="reader">The BinaryReader to read from.</param>
        public override void Read(AssetBinaryReader reader)
        {
            SetProperty = ExpressionSerializer.ReadExpression(reader);
            int numEntries = reader.ReadInt32(); // Number of elements

            Elements = reader.ReadExpressionArray(EExprToken.EX_EndSet);
        }
Example #9
0
 /// <summary>
 /// Reads out the expression from a BinaryReader.
 /// </summary>
 /// <param name="reader">The BinaryReader to read from.</param>
 public override void Read(AssetBinaryReader reader)
 {
     ObjectExpression  = ExpressionSerializer.ReadExpression(reader);
     Offset            = reader.ReadUInt32();
     RValuePointer     = reader.XFER_PROP_POINTER();
     ContextExpression = ExpressionSerializer.ReadExpression(reader);
 }
Example #10
0
        public void DefaultExpressionsCanBeSerialized()
        {
            var defaultValue         = Expression.Default(typeof(int));
            var expressionSerializer = new ExpressionSerializer(new JsonSerializer());

            expressionSerializer.SerializeText(defaultValue);
        }
Example #11
0
        public Serialize()
        {
            _jsonSerializer   = new CustomBonsaiSerializer();
            _binarySerializer = new ExpressionSerializer(new BinaryObjectSerializer(), ExpressionFactory.Instance);

            _expr = (Expression <Func <IEnumerable <int> > >)(() => Enumerable.Range(0, 10).Where(x => x > 0).Select(x => x * x));
        }
Example #12
0
        public static Expression ReadExpression(byte[] data)
        {
            var expressionSerializer = new ExpressionSerializer(new Serialize.Linq.Serializers.BinarySerializer());
            var expression           = expressionSerializer.DeserializeBinary(data);

            return(expression);
        }
    public T Get <T>(Expression <Func <dynamic, bool> > query)
    {
        var serializer           = new ExpressionSerializer(new JsonSerializer());
        var serializedExpression = serializer.SerializeText(query);

        return((T)Server.Retrieve(serializedExpression, typeof(T).FullName));
    }
        static void Main(string[] args)
        {
            const string fileName = "sumRange.bin";

            ExpressionSerializer serializer = new ExpressionSerializer(
                new TypeResolver(new[] { Assembly.GetExecutingAssembly() })
                );

            serializer.Serialize(sumRange).Save(fileName);

            Expression <Func <int, int, int> > deserializedSumRange =
                serializer.Deserialize <Func <int, int, int> >(
                    XElement.Load(fileName)
                    );

            Func <int, int, int> funcSumRange =
                deserializedSumRange.Compile();

            Console.WriteLine(
                "Deserialized func returned: {0}",
                funcSumRange(1, 4)
                );

            Console.ReadKey();
        }
Example #15
0
        /// <summary>
        /// 取得规则组的表达式
        /// </summary>
        /// <param name="ruleGroupId">规则组ID</param>
        /// <returns></returns>
        private string GetExpressionStr(Guid ruleGroupId, string userName, string groupId)
        {
            // 规则信息
            var ruleGroup      = _context.Set <RuleGroup>().Find(ruleGroupId);
            var rules          = _context.Set <Rule>().AsNoTracking().Where(rule => rule.RuleGroupId == ruleGroupId);
            var ruleConditions = _context.Set <RuleCondition>().AsNoTracking().Where(condition => condition.RuleGroupId == ruleGroupId);

            // 生成表达式
            var topRule         = rules.Where(rule => rule.UpRuleId.Equals(new Guid())).FirstOrDefault();
            var entityType      = EntityTypeFinder.FindEntityType(ruleGroup.DbContext, ruleGroup.Entity);
            var expressionGroup = new ExpressionGroup(entityType);
            var keyValuePairs   = new Dictionary <string, string> {
            };

            keyValuePairs.Add("UserName", userName);
            keyValuePairs.Add("GroupId", groupId);
            MakeExpressionGroup(topRule, rules, ruleConditions, entityType, keyValuePairs, ref expressionGroup);

            // 生成过滤表达式
            Expression lambda = expressionGroup.GetLambda();

            // 表达式序列化
            var serializer = new ExpressionSerializer(new JsonSerializer())
            {
                AutoAddKnownTypesAsListTypes = true
            };

            serializer.AddKnownType(typeof(Core.Expressions.ExpressionType));
            return(serializer.SerializeText(lambda));
        }
        void OnDeserialized(StreamingContext context)
        {
            var serializer = new ExpressionSerializer();
            var xmlElement = XElement.Parse(serializedPredicate);

            predicate = serializer.Deserialize <Func <T, bool> >(xmlElement);
        }
Example #17
0
        private static void bench()
        {
            var sw = Stopwatch.StartNew();

            for (var i = 0; i < 5_000_000; i++)
            {
                //Expression<Func<string, string, int>> exp = (x, y) => x.Length + y.Length;
                //exp.Compile()("a", "b");

                //Func<string, string, int> foo = (x, y) => x.Length + y.Length;
                //foo("a", "b");

                //new Context().Eval("(x,y) => x.length + y.length").As<Function>().Call(new Arguments { "a", "b" });

                Expression <Func <string, string, long> > exp = (x, y) => x.Length + y.Length;
                var serializer   = new ExpressionSerializer();
                var deserializer = new ExpressionDeserializer();
                var serialized   = serializer.Serialize(exp);
                var deserialized = (LambdaExpression)deserializer.Deserialize(serialized);
                var value        = new ExpressionEvaluator().Eval(deserialized.Body,
                                                                  new[] {
                    new Parameter(deserialized.Parameters[0], "a"),
                    new Parameter(deserialized.Parameters[1], "b"),
                });
            }

            sw.Stop();
            Console.WriteLine(sw.Elapsed);
        }
Example #18
0
        public void SerializeWithDateTimeLocalTest()
        {
            foreach (var textSerializer in new ITextSerializer[] { new JsonSerializer(), new XmlSerializer() })
            {
                var serializer = new ExpressionSerializer(textSerializer);
                var yarrs      = new[]
                {
                    new Yarr {
                        Date = new DateTime(3000, 1, 1)
                    },
                    new Yarr {
                        Date = new DateTime(2000, 1, 1)
                    },
                    new Yarr(),
                    new Yarr {
                        Date = DateTime.Now.AddYears(1)
                    }
                };
                var date = DateTime.Now;
                Expression <Func <Yarr, bool> > expectedExpression = f => f.Date > date;
                var expected = yarrs.Where(expectedExpression.Compile()).Count();

                var serialized       = serializer.SerializeText(expectedExpression);
                var actualExpression = (Expression <Func <Yarr, bool> >)serializer.DeserializeText(serialized);
                var actual           = yarrs.Where(actualExpression.Compile()).Count();

                Assert.Equal(expected, actual);
            }
        }
        private static ExpressionSerializer GetSerializer()
        {
            var typeResolver = new TypeResolver(assemblies: AppDomain.CurrentDomain.GetAssemblies(), knownTypes: null);
            var serializer   = new ExpressionSerializer(typeResolver);

            return(serializer);
        }
Example #20
0
        private static Expression SerializeDeserializeExpressionAsBinary(Expression expression, ISerializer serializer)
        {
            var expressionSerializer = new ExpressionSerializer(serializer);
            var serialized           = expressionSerializer.SerializeBinary(expression);

            return(expressionSerializer.DeserializeBinary(serialized));
        }
Example #21
0
        public static long UpdateOne <T>(DBREQUESTTYPE type, Expression <Func <T, bool> > expression, Dictionary <string, object> update)
        {
            long   updated    = 0;
            var    serializer = new ExpressionSerializer(new BinarySerializer());
            string json       = JsonConvert.SerializeObject(update);

            byte[]  serializedFilter = serializer.SerializeBinary(expression);
            byte[]  serializedUpdate = Serialize(json);
            ByteRef payload          = new ByteRef(2 + 4 + serializedFilter.Length + 4 + serializedUpdate.Length);

            payload.Set <byte>(0, type);
            payload.Set <byte>(1, (byte)DBRESULTTYPE.UPDATEONE);
            payload.Set <int>(2, serializedFilter.Length);
            payload.Set <byte[]>(6, serializedFilter);
            payload.Set <int>(6 + serializedFilter.Length, serializedUpdate.Length);
            payload.Set <byte[]>(6 + serializedFilter.Length + 4, serializedUpdate);

            ByteRef queryResult = new ByteRef(SendQuery(payload.Get()));

            if (queryResult.Length >= 5 || (DBRESPONSETYPE)queryResult.GetByte(0) != DBRESPONSETYPE.FAILURE)
            {
                updated = queryResult.GetUInt32(1);
            }

            return(updated);
        }
        /// <summary>
        /// Writes the expression to a BinaryWriter.
        /// </summary>
        /// <param name="writer">The BinaryWriter to write from.</param>
        /// <returns>The iCode offset of the data that was written.</returns>
        public override int Write(AssetBinaryWriter writer)
        {
            int offset = 0;

            offset += ExpressionSerializer.WriteExpression(Delegate, writer);
            offset += ExpressionSerializer.WriteExpression(DelegateToAdd, writer);
            return(offset);
        }
        public override Task <ISendStrategy> GetInputSendStrategy()
        {
            int joinFieldIndex = ((HashRippleJoinPredicate)predicate).JoinFieldIndex;
            Expression <Func <TexeraTuple, int> > exp = tuple => tuple.FieldList[joinFieldIndex].GetHashCode();
            var serializer = new ExpressionSerializer(new JsonSerializer());

            return(Task.FromResult(new Shuffle(inputGrains, serializer.SerializeText(exp)) as ISendStrategy));
        }
Example #24
0
        /// <summary>
        /// Writes the expression to a BinaryWriter.
        /// </summary>
        /// <param name="writer">The BinaryWriter to write from.</param>
        /// <returns>The iCode offset of the data that was written.</returns>
        public override int Write(AssetBinaryWriter writer)
        {
            int offset = 0;

            offset += ExpressionSerializer.WriteExpression(VariableExpression, writer);
            offset += ExpressionSerializer.WriteExpression(AssignmentExpression, writer);
            return(offset);
        }
Example #25
0
        public override void writeData(BinaryWriter bw)
        {
            bw.Write((UInt16)0); // Version
            //bw.Write(value);

            ExpressionSerializer.Write(expression, bw);
            bw.Write(variableId);
        }
Example #26
0
        public override void readData(BinaryReader br)
        {
            br.ReadUInt16();
            //value = br.ReadString();

            expression = ExpressionSerializer.Read(br);
            variableId = br.ReadString();
        }
Example #27
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            var str = serializer.Deserialize <string>(reader);
            var expressionSerializer = new ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
            var expression           = expressionSerializer.DeserializeText(str);

            return(expression);
        }
Example #28
0
        public async void Serialize(Expression <Func <Customer, bool> > lambda, string expectedResult)
        {
            var serializer = new ExpressionSerializer();
            var result     = await serializer.Serialize(lambda);

            //Console.WriteLine(result);
            Assert.Equal(expectedResult, result);
        }
        /// <summary>
        /// Writes the expression to a BinaryWriter.
        /// </summary>
        /// <param name="writer">The BinaryWriter to write from.</param>
        /// <returns>The iCode offset of the data that was written.</returns>
        public override int Write(AssetBinaryWriter writer)
        {
            int offset = 0;

            offset += writer.XFERPTR(StructMemberExpression);
            offset += ExpressionSerializer.WriteExpression(StructExpression, writer);
            return(offset);
        }
Example #30
0
        private void OnSerializing(StreamingContext context)
        {
            var cleanedExpression = ExpressionUtility.Ensure(_predicate);
            var serializer        = new ExpressionSerializer();
            var xmlElement        = serializer.Serialize(cleanedExpression);

            _serializedPredicate = xmlElement.ToString();
        }
 public static IQueryable DeserializeQuery(this DataContext dc, XElement rootXml)
 {
     DLinqSerializationTypeResolver resolver = new DLinqSerializationTypeResolver(dc);
     DLinqCustomExpressionXmlConverter customConverter = new DLinqCustomExpressionXmlConverter(dc, resolver);
     ExpressionSerializer serializer = new ExpressionSerializer(resolver) { Converters = { customConverter } };
     Expression queryExpr = serializer.Deserialize(rootXml);
     // Query kind is populated by the ResolveXmlFromExpression method
     if (customConverter.QueryKind == null)
         throw new Exception(string.Format("CAnnot deserialize into DLinq query for datacontext {0} - no Table found", dc));
     return customConverter.QueryKind.Provider.CreateQuery(queryExpr);
 }
 public static XElement SerializeQuery(this IQueryable query)
 {
     DLinqSerializationTypeResolver resolver = new DLinqSerializationTypeResolver(null);
     ExpressionSerializer serializer = new ExpressionSerializer(resolver) { Converters = { new DLinqCustomExpressionXmlConverter(null, resolver) } };
     return serializer.Serialize(query.Expression);
 }