将LambdaExpression与字符串进行序列化以保存在数据库中

时间:2019-05-22 16:00:37

标签: c# linq serialization expression

是否可以序列化Expression<T>LambdaExpression?我需要将表达式树保存在数据库中(varchar列)。

var expr = (LambdaExpression)expression;
if (expr != null)
{   
    var newBody = Expression.Convert(expr.Body, typeof(string));
    var expr2 = Expression.Lambda(newBody, expr.Parameters);
    var castedExpression = expr2 as Expression<Func<ShipmentViewModel, string>>;

    Func = castedExpression.Compile();
}

我想重建LambdaExpression,进行编译和重用。目前,我找不到任何解决方案。

1 个答案:

答案 0 :(得分:1)

表达式不可序列化。但是,有些第三方工具可能会有所帮助。

我建议您查看Serialize.Linq。它是最新的,已维护的,具有可观的下载量,并且将支持.NET Framework 4.x和.NET Standard。

在示例中,使用起来也非常简单:

Expression expression = Expression.Parameter(typeof(Person), "x");

// Serialize expression
var serializer = new ExpressionSerializer(new JsonSerializer());
string value = serializer.SerializeText(expression);
Console.WriteLine("value:" + value);

// Deserialize expression
var actualExpression = serializer.DeserializeText(value);
Console.WriteLine("actualExpression:" + actualExpression.ToJson());