Сериализация LambdaExpression в / из строки для сохранения в базе данных - PullRequest
1 голос
/ 22 мая 2019

Можно ли сериализовать 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 Ответ

1 голос
/ 22 мая 2019

Выражения не сериализуются.Тем не менее, есть некоторые сторонние инструменты, которые могут помочь.

Я бы порекомендовал взглянуть на 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...