C# 将表达式转换回Func的lambda<;Foo,bool>;(序列化后)

C# 将表达式转换回Func的lambda<;Foo,bool>;(序列化后),c#,linq,lambda,expression-trees,C#,Linq,Lambda,Expression Trees,我正在尝试序列化和反序列化一个Func[Foo,bool]。我正在使用Serial.Linq进行序列化,它似乎可以工作,但我无法重新组装lambda谓词。大部分原因可能是我对表达式树的理解不够 我尝试过以不同的顺序和表达式传递类型参数。将转换为Func[Foo,bool],但我尝试的似乎都不起作用 using System; using Serialize.Linq.Serializers; using System.Linq.Expressions; public class Foo {

我正在尝试序列化和反序列化一个
Func[Foo,bool]
。我正在使用
Serial.Linq
进行序列化,它似乎可以工作,但我无法重新组装lambda谓词。大部分原因可能是我对表达式树的理解不够

我尝试过以不同的顺序和
表达式传递类型参数。将
转换为
Func[Foo,bool]
,但我尝试的似乎都不起作用

using System;
using Serialize.Linq.Serializers;
using System.Linq.Expressions;


public class Foo
{
        public string Bar {get; set;}
}

public class Program
{

    public static void Main()
    {
        // Step 1 Serialize it
        Expression<Func<Foo,bool>> bark = foo => foo.Bar.Contains("ruff");
        var expressionSerializer = new Serialize.Linq.Serializers.ExpressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
        var serializedQuery = expressionSerializer.SerializeText(bark);

        // Step 2 Deserialize it
        var barkExpression = expressionSerializer.DeserializeText(serializedQuery);
        var barkExpressionReturnArgument = Expression.Parameter(typeof(bool));
        var barkExpressionArgument = Expression.Parameter(typeof(Foo));
        // var convertedExpression = Expression.Convert(barkExpression, typeof(Func<Foo,bool>));

        // How do I get bark back? I've tried a few variations here and can't quite get it. :(
        var barkFunction = Expression.Lambda<Func<Foo, bool>>(barkExpression, barkExpressionArgument).Compile();

        Console.WriteLine("Hello World");


    }

}
使用系统;
使用Serialize.Linq.serializer;
使用System.Linq.Expressions;
公开课Foo
{
公共字符串条{get;set;}
}
公共课程
{
公共静态void Main()
{
//步骤1序列化它
表达式bark=foo=>foo.Bar.Contains(“ruff”);
var expressionSerializer=new Serialize.Linq.Serializers.expressionSerializer(new Serialize.Linq.Serializers.JsonSerializer());
var serializedQuery=expressionSerializer.SerializeText(树皮);
//步骤2反序列化它
var barkExpression=expressionSerializer.DeserializeText(serializedQuery);
var barkExpressionReturnArgument=Expression.Parameter(typeof(bool));
var barkExpressionArgument=表达式.参数(typeof(Foo));
//var convertedExpression=Expression.Convert(barkExpression,typeof(Func));
//我怎样才能把树皮弄回来?我在这里试过几种不同的方法,但都不太明白(
var barkFunction=Expression.Lambda(barkExpression,barkExpressionArgument).Compile();
Console.WriteLine(“你好世界”);
}
}

我想出来了。我想做的太多了,我不需要参数表达式

反序列化后,只需执行以下操作:

var barkFunction = ((Expression<Func<Foo, bool>>)barkExpression).Compile()
var barkFunction=((表达式)barkExpression).Compile()

我找到了答案。我想做的太多了,不需要参数表达式

反序列化后,只需执行以下操作:

var barkFunction = ((Expression<Func<Foo, bool>>)barkExpression).Compile()
var barkFunction=((表达式)barkExpression).Compile()