【问题标题】:Serializing and Deserializing Expression Trees in C#在 C# 中序列化和反序列化表达式树
【发布时间】:2010-09-18 02:13:29
【问题描述】:

有没有办法在 C# 中反序列化表达式,我想将表达式存储在数据库中并在运行时加载它们。

【问题讨论】:

标签: c# serialization expression-trees


【解决方案1】:

我继续在 Serializing and Deserializing Expression Trees in C# 提到的库上工作

看起来该项目已被放弃(2008 年),但我做了一些工作,现在它可以与 .NET 4.0 和 Silverlight 一起使用。我对他们的代码进行了错误修复,并使其更加独立于 DAL。

http://expressiontree.codeplex.com/

【讨论】:

  • +1 提出了一个可行的解决方案。我尝试使用 MSDN 上的原始库,它无法反序列化简单的二进制表达式节点。你的项目效果很好。谢谢!
  • 它是 Nuget 上的项目吗?
  • @MohammadDayyan,微软一直在其包管理工具上优柔寡断和不一致。有时 ASP.NET CORE 包可以与 Nuget 一起安装,在其他情况下,例如MongoDB 驱动程序将无法通过 NuGet 获得。至少微软仍然有洞察力允许 NPM 管理包。更有可能将其放在 NPM 上
  • @RepoMan 解决问题在帮助某人时对我来说更有价值。也许你可以贡献一些关于使用的文档——让我们谈谈..
【解决方案2】:

在 GitHub/Nuget 上有一个名为 MetaLinq 的项目,旨在让使用表达式树更容易。

它在普通表达式和可变且完全可序列化的“可编辑表达式”之间转换,因此可以与 Json、Xml、二进制等一起使用。

也可以查看blog post 了解更多信息。

【讨论】:

    【解决方案3】:

    其他选项是 code.msdn.com 上的 Expression Tree Serialization 项目 - 这里似乎更需要什么?

    更新:现在http://archive.msdn.microsoft.com/exprserialization

    【讨论】:

    • 表达式树序列化代码已从代码库code.msdn.microsoft.com/exprserialization 中删除,知道将其移至何处或更好的替代方案吗?
    • @Kiran:你什么意思?代码下载还在;检查页面顶部的下载选项卡。
    • 是的,现在可能是暂时的,昨天我尝试上面的链接时,页面抛出了一个未找到项目的错误。我现在看到项目并下载。谢谢!!!
    【解决方案4】:

    看看我的新图书馆Serialize.Linq。它将 linq 表达式序列化为 json、xml 和二进制。

    【讨论】:

    • 你以前用过这个吗?您的体验如何/发现任何限制?
    • 我在上一个项目中使用了类似的版本。效果很好。
    • 你为什么要写一些让层级之间的界限变得更糟的东西?您正在促进 DAL 域对象向 BAL 的公开......除非您的库以某种方式自动将 DTO(以及针对它们的查询)转换为域对象/查询。我在文档中没有看到任何表明这种行为的内容。
    • @M.Babcock:您想在表达式中使用的 DTO 与实体不是库逻辑的一部分。
    • @esskar 你的博客/整个网站似乎已经消失了。搬家了吗?
    【解决方案5】:

    不完整;但是,Dynamic LINQ 示例可能会有所帮助。您当然可以将表达式序列化为字符串(在某种程度上 - 泛型看起来有点古怪),但没有内置的解析器。

    【讨论】:

    • 我不知道如何使用示例将表达式序列化为字符串,只有另一个方向,将其作为字符串并创建表达式树。我该调用什么方法?
    【解决方案6】:

    WCF RIA 服务允许序列化IQuerayble<T>

    WCF RIA Services Part 3 – Updating Data

    【讨论】:

    【解决方案7】:

    我正在做一个序列化表达式的项目。没关系,你可以使用它。 http://www.codeproject.com/Articles/851187/ServicePredicateBuilder-for-creating-Serializable

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 2014-06-08
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多