序列化表达式以访问字符串
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
*/
有多种可用的字符串表示形式。
(免责声明:我是后一个库的作者。)
我正在研究类似于文本模板引擎的东西。
我正在从我的服务器向客户端提供元数据以表示访问路径的 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
*/
有多种可用的字符串表示形式。
(免责声明:我是后一个库的作者。)