/// <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)); }
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));