序列化表达式以访问字符串

Serialize Expression to access string

我正在研究类似于文本模板引擎的东西。
我正在从我的服务器向客户端提供元数据以表示访问路径的 javascript 版本,例如:

假设我有一个 DTO:

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我在服务器上有一个映射,如下所示:

Expression<Func<Employee, string>> firstNameExpression = e => employee.FirstName;

当return发给客户时,我想return类似于表达式

的字符串表示形式
$"{nameof(Employee)}.{nameof(Employee.FirstName)}";

我宁愿不必手动解析表达式或遍历表达式树。

//e.g Pseudo Code

LambdaExpression expression
if(expression is MemberExpression expr)
{
   stringBuilder.Prepend(expr.Body.Member.Name)
}
//... Handle errors 

有没有一种简单的方法可以像用代码写的那样输出和表达?

如果您需要精确 serialize/deserialize 表达式树,Serialize.Linq 库可能会有所帮助。

如果您只需要某种用于显示的字符串表示形式,那么我会推荐我编写的 ExpressionTreeToString 库:

using ExpressionTreeToString;

Console.WriteLine(firstNameExpression.ToString("C#"));
/*
    e => e.FirstName
*/

Console.WriteLine(firstNameExpression.ToString("Textual tree", "C#"));
/*
    Lambda (Func<Employee, string>)
        · Parameters[0] - Parameter (Employee) e
        · Body - MemberAccess (string) FirstName
            · Expression - Parameter (Employee) e
*/

有多种可用的字符串表示形式。

(免责声明:我是后一个库的作者。)