我正在尝试序列化和反序列化一个Func[Foo,bool]
。我使用Serial.Linq
进行序列化,因为它的部分工作正常,但我无法重新组装lambda谓词。大部分的原因可能是因为我对表达树的理解很差。
我尝试过以不同的顺序和Expression.Convert
将类型参数传递给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");
}
}
发布于 2015-08-08 20:08:46
我想通了。我想做的太多了,我不需要参数表达式。
仅在反序列化之后:
var barkFunction = ((Expression<Func<Foo, bool>>)barkExpression).Compile()
https://stackoverflow.com/questions/31900668
复制