尝试将 DotLiquid 与 c# 一起使用

本文关键字:一起 DotLiquid | 更新日期: 2023-09-27 18:34:44

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

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

其中 myTemplate 与示例中完全相同:

<p>{{ user.name | upcase }} has to do:</p>
<ul>
{% for item in user.tasks -%}
  <li>{{ item.name }}</li>
{% endfor -%}
</ul>

但是当点击渲染时,我收到错误:mscorlib 中发生了类型为"System.Reflection.TargetParameterCountException"的异常.dll但未在用户代码中处理内部消息是:参数计数不匹配。

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

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

我创建这样的对象:

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

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

尝试将 DotLiquid 与 c# 一起使用

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

所以传递一个匿名对象:

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

或者,在您的情况下(我还没有测试过,但这应该有效(:

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