Пример #1
0
        /// <summary>
        /// Serialize an expression tree.
        /// </summary>
        /// <param name="root">The root <see cref="Expression"/>.</param>
        /// <param name="config">Optional configuration.</param>
        /// <returns>The serialized <see cref="Expression"/> tree.</returns>
        /// <exception cref="ArgumentNullException">Thrown when the <see cref="Expression"/> is <c>null</c>.</exception>
        public static string Serialize(
            Expression root,
            Action <IConfigurationBuilder> config = null)
        {
            Ensure.NotNull(() => root);
            SerializationState state;

            if (config != null)
            {
                var builder = ServiceHost.GetService <IConfigurationBuilder>();
                config(builder);
                state = builder.Configure();
            }
            else
            {
                state = DefaultConfiguration.Value.GetDefaultState();
            }

            if (state.CompressExpression)
            {
                root = Compressor.EvalAndCompress(root);
            }

            var serializeRoot = new SerializationRoot(SerializerValue.Serialize(root, state))
            {
                TypeIndex = state.TypeIndex.ToArray(),
            };

            return(JsonSerializer.Serialize(serializeRoot, state.Options));
        }
Пример #2
0
        private static Expression Roundtrip(Expression expr, IExpressionSerializer serializer)
        {
            var slim             = serializer.Lift(expr);
            var bonsai           = serializer.Serialize(slim);
            var roundtrippedSlim = serializer.Deserialize(bonsai);

            return(serializer.Reduce(roundtrippedSlim));
        }
 internal static string Serialize(System.Linq.Expressions.Expression pred)
 {
     EnsureSerializer();
     return(s_serializer.Serialize(pred));
 }
 /// <summary>
 /// Serializes a slim expression into JSON.
 /// </summary>
 /// <param name="serializer">The JSON serializer to use.</param>
 /// <param name="expression">The slim expression to serialize.</param>
 /// <returns>The JSON serialized expression.</returns>
 private JToken SerializeExpressionSlim(JsonSerializer serializer, ExpressionSlim expression) => Parse(serializer, _expressionSerializer.Serialize(expression));