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)); }
/// <summary> /// Deserializes JSON into an expression. /// </summary> /// <param name="json">The JSON to deserialize.</param> /// <returns>The deserialized expression.</returns> private Expression DeserializeExpression(JToken json) { if (json == null) { return(null); } else if (json.Type == JTokenType.Null) { return(null); } var jsonText = GetJsonString(json); if (_expressionSerializer != null) { var slim = DeserializeExpressionSlim(jsonText); return(_expressionSerializer.Reduce(slim)); } else { return(_deserializeExpression(jsonText)); } }