我正在尝试使用Dot Liquid,它是 c# 中最酷的模板引擎之一。Dot Liquid 使用一种方法来确保使用模板安全。这是解释页面。
这是来自它的wiki的解释:
默认情况下,DotLiquid 仅接受有限数量的类型作为 Render 方法的参数 - 包括 .NET 原始类型(int、float、string 等),以及一些集合类型,包括 IDictionary、IList 和 IIndexable(自定义 DotLiquid界面)。
如果它支持任意类型,那么它可能会导致属性或方法无意中暴露给模板作者。为了防止这种情况,DotLiquid 使用 Drop 对象。Drops 使用选择加入的方法来公开对象数据。
Drop 类只是 ILiquidizable 的一种实现,将对象暴露给 DotLiquid 模板的最简单方法是直接实现 ILiquidizable
维基示例代码:
public class User
{
public string Name { get; set; }
public string Email { get; set; }
}
public class UserDrop : Drop
{
private readonly User _user;
public string Name
{
get { return _user.Name; }
}
public UserDrop(User user)
{
_user = user;
}
}
Template template = Template.Parse("Name: {{ user.name }}; Email: {{ user.email }};");
string result = template.Render(Hash.FromAnonymousObject(new
{
user = new UserDrop(new User
{
Name = "Tim",
Email = "me@mydomain.com"
})
}));
因此,当我将 DataRow 传递给液体时,液体不会让我显示它的内容并告诉我:
'System.Data.DataRow' 无效,因为它既不是内置类型也不是实现 ILiquidizable
是否有任何解决方案可以传递实现 ILiquidizable 的 DataRow 对象?谢谢