2015-08-09 1 views
0

Я пытаюсь сериализовать и десериализовать Func[Foo,bool]. Я использую Serial.Linq для сериализации, и для этого он, похоже, работает, но я не могу восстановить свой лямбда-предикат. Большая часть этого, вероятно, проистекает из моего плохого понимания деревьев выражений.Кастинг/преобразование выражения обратно в лямбда Func <Foo,bool> (после сериализации)

Я пробовал передавать параметры типа в разных заказах и 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"); 


    } 

} 

https://dotnetfiddle.net/MWNeol

ответ

0

Я понял это. Я пытался сделать слишком много, мне не нужны выражения Parameter.

Просто это после десериализации:

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

 Смежные вопросы

  • Нет связанных вопросов^_^