【发布时间】:2014-06-08 19:45:43
【问题描述】:
我在用c#做一个分布式系统,遇到了一个障碍。
我需要能够用类型序列化 Predicate
Predicate<ICollection<IEntity>> p = (entities => entities.OfType<Person>().Count() <= 3);
我相信这在 .net 中是不可能的,所以我的问题是是否有任何框架可以做到这一点。
我已经尝试了几个框架,但一直遇到的问题是它们无法序列化采用集合或列表的谓词
希望有人知道解决方案。已经被这个问题困扰了几个星期了......
【问题讨论】:
-
上面的
p不是表达式树,它只是一个匿名函数。它被编译为“指向”生成的方法static bool SomeFunnyName(ICollection<IEntity> entities) { return entities.OfType<Person>().Count() <= 3; }的委托。 -
在几周内,您可以开发自己的框架来执行此操作。
-
一般情况下无法解决;并非所有可以想象的方法在您反序列化它的上下文中都是有效的,并且有很多东西可以放入本质上无法序列化的方法中。
-
不清楚你到底想做什么——你想得到一个表达式并存储它,然后再恢复,还是将你的表达式保持为文字字符串就足够了?如果后者为真,您总是可以将表达式即时编译成新的程序集。
-
如果您找到了喜欢的解决方案,请将其发布为答案;不要编辑问题。
标签: c# serialization lambda expression-trees