如何通过自定义对象

时间:2017-08-25 12:48:14

标签: c# dotliquid

我需要从我的域模型中的特定对象动态呈现电子邮件模板。我知道我可以创建对象并从Drop类继承它。另外,我知道我可以在全局范围内将特定类型添加到安全类型,但这并不能解决任务。 如何从我的特定类型渲染模板?

var message = _template.Render(Hash.FromAnonymousObject(new {Item = User}));
public class User { public string Name { get; set;}.....}

安全类型不适合此任务,因为在我的特定对象中有嵌套对象,我也需要访问它们。

Template.RegisterSafeType(typeof(User,string[] allowedMembers));

我可以从dotliquid程序集的drop类继承我的特定类型,但我认为它对我没有帮助。

2 个答案:

答案 0 :(得分:0)

Dim TemplateContent = CacheHelper.GetFileContentsNonCached("/Path/To/Template/File.htm")

Dim TemplateParsed = DotLiquid.Template.Parse(TemplateContent)
Return TemplateParsed.Render(Hash.FromAnonymousObject(New With {
  .Item = User,
  ......
}))

上面的代码在VB.Net中,但很容易转换为C#。 这不需要注册任何类型的安全等。

答案 1 :(得分:0)

如果您想避免使用RegisterSafeType及其替代方案,则

Drop 解决方案。

只需注册所有相关类型(近似代码):

Template.RegisterSafeType(typeof(User), userAllowedMembers);

然后说User具有类型Address的属性。您只需使用

继续注册

Template.RegisterSafeType(typeof(Address), addressAllowedMembers);

以此类推。