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

C# 序列化表达式以访问字符串,c#,parsing,expression,expression-trees,C#,Parsing,Expression,Expression Trees,我正在研究类似于文本模板引擎的东西。 我将从服务器向客户端提供元数据,以表示访问路径的javascript版本,例如: 假设我有一个DTO: public class Employee { public string FirstName { get; set; } public string LastName { get; set; } } 我在服务器上有一个映射,如下所示: Expression<Func<Employee, string>> firs

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

假设我有一个DTO:

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
我在服务器上有一个映射,如下所示:

Expression<Func<Employee, string>> firstNameExpression = e => employee.FirstName;
我宁愿不必手动解析表达式或遍历表达式树

//e.g Pseudo Code

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

是否有一种简单的方法可以输出和表达式,就好像它是以某种方式在代码中编写的一样?

如果您需要精确地序列化/反序列化表达式树,库可能会有所帮助

如果您想要的只是某种用于显示的字符串表示,那么我建议您使用我编写的库:

使用ExpressionTreeToString;
Console.WriteLine(firstNameExpression.ToString(“C#”);
/*
e=>e.FirstName
*/
WriteLine(firstNameExpression.ToString(“文本树”、“C#”));
/*
Lambda(Func)
·参数[0]-参数(员工)e
·Body-MemberAccess(字符串)名字
·表达式-参数(员工)e
*/
有多种可用的字符串表示形式


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

我最终解决了原来的问题,但这个库似乎可以解决我的问题
//e.g Pseudo Code

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