尝试使用带有c#的DotLiquid

我无法使用C#在http://dotliquidmarkup.org/try-online中执行示例。 我有相同的示例,并尝试使用以下代码执行它:

var template = DotLiquid.Template.Parse(myTemplate); Message.Body = template.Render(DotLiquid.Hash.FromAnonymousObject(user)); 

myTemplate与示例完全相同:

 

{{ user.name | upcase }} has to do:

    {% for item in user.tasks -%}
  • {{ item.name }}
  • {% endfor -%}

但是当点击Render时我收到错误:mscorlib.dll中出现类型’System.Reflection.TargetParameterCountException’的exception,但未在用户代码中处理,内部消息为:参数计数不匹配。

我告诉我的数据类型与示例中的相同:

 public class User : DotLiquid.Drop { public string Name { get; set; } public List Tasks { get; set; } } public class Task { public string Name { get; set; } } 

我创建这样的对象:

 var user = new User { Name = "Tim Jones", Tasks = new List { new Task { Name = "Documentation" }, new Task { Name = "Code comments" } } }; 

我无法弄清楚我的代码有什么问题。 将不胜感激任何帮助..

您正在使用Hash.FromAnonymousObject ,它需要一个匿名对象(顾名思义)。

所以传递一个匿名对象:

 template.Render(DotLiquid.Hash.FromAnonymousObject(new { user = new User { Name = "Tim Jones", Tasks = new List { new Task { Name = "Documentation" }, new Task { Name = "Code comments" } } } })); 

或者,在你的情况下(我没有测试过,但这应该工作):

 template.Render(DotLiquid.Hash.FromAnonymousObject(new { user = this.user }));