具有对象属性的StringTemplate变量

时间:2010-03-25 20:29:01

标签: c# .net stringtemplate

我第一次开始使用StringTemplate,并且试图弄清楚如何让StringTemplate执行以下操作:

article.st

$elemenets:article/elements()$

文章/ elements.st

$if($it.is_type)$ $it:article/type()$
$elseif($it.is_type2)$ $it:article/type2()$
// also tried: $it.value:article/type2()$, same result
$endif$

文章/ type.st

<type>$it.value$</type>

文章/ type2.st

<h1>$it.value.title</h1>
<type2>$it.value.text</type2>

Program.cs的

StringTemplateGroup group = new StringTemplateGroup("article", "Templates");
StringTemplate template = group.GetInstanceOf("Article");
template.SetAttribute("elements", new Element() { is_type = true, value = "<p>Hello Text</p>" });
template.SetAttribute("elements", new Element() { is_type2 = true, value = new { title = "Type 2 Title", text = "Type2 Text" } });
return template.ToString();

这里的问题是... if(it.is_type)工作正常,文章/ type.st工作正常。但是,当我将对象传递给'Element'的value属性时,我收到此错误:

Class ClassName has no such attribute: text in template context [Article article/element elseif(it.is_type2)_subtemplate article/type2]

所以 - 我的问题是,如何使用StringTemplate在对象中访问对象的属性/字段?

1 个答案:

答案 0 :(得分:1)

出现StringTemplate不支持:

public string name { get; set; }

当我将其转换为:

public string name;

它运作得很好......所以现在我的元素可以嵌套了。