微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决序列化表达式以访问字符串

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

假设我有一个 DTO:

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

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

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

返回给客户端时,我想返回类似于表达式的字符串表示的内容

$"{nameof(Employee)}.{nameof(Employee.FirstName)}";

我不想手动解析表达式或遍历表达式树。

//e.g Pseudo Code

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

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

解决方法

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

如果您想要的只是某种用于显示目的的字符串表示,那么我会推荐我编写的 Serialize.Linq 库:

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
*/

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。