是否可以序列化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
,进行编译和重用。目前,我找不到任何解决方案。
答案 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());