stringtemplate .net动态对象

时间:2010-03-09 17:07:59

标签: c# .net stringtemplate

我正在使用字符串模板来呈现一些内容,但内容可能是变量,因此不确定如何传递(使用.net / c#)

基本思路是我有一个List>需要最终作为参数,例如

List<KeyValuePair<string, object>> ret = new List<KeyValuePair<string, object>>();
ret.Add(new KeyValuePair<string, object>("elem1", true));
ret.Add(new KeyValuePair(string, object>("elem2", false));

现在我希望这些在字符串模板中显示为:

$ $ item.elem1 $ $ item.elem2

我可以让它们为$ elem1 $或$ elem2 $但我需要它们在一个结构中。所以我实际上需要说服我传入一个带有属性elem1和elem2的对象的字符串模板setAttribute,而实际上我有一个KeyValuePairs列表。

由于

2 个答案:

答案 0 :(得分:4)

实际上,一个非常小的重写应该有效。您需要使用字典,甚至可以嵌套它们(使用ST 3.2):

[Test]
public void When_Building_Text_With_A_Dictionary_As_The_Attributes_It_Should_Map_Members_To_Keys()
{
    IDictionary<string, object> ret = new Dictionary<string, object>();
    ret["elem1"] = true;
    ret["elem2"] = false;

    var nestedObj = new Dictionary<string, object>();
    nestedObj["nestedProp"] = 100;
    ret["elem3"] = nestedObj;

    var template = new StringTemplate("$elem1$ or $elem2$ and value: $elem3.nestedProp$");
    template.Attributes = ret;

    StringBuilder sb = new StringBuilder();
    StringWriter writer = new StringWriter(sb);
    template.Write(new NoIndentWriter(writer));
    writer.Flush();

    var renderedText = sb.ToString();

    Assert.That(renderedText, Is.EqualTo("True or False and value: 100"));
}

我和一位同事正在寻找复制STST(ST Standalone Tool)的功能,它使用json作为属性,我们构建了一个简单的JObject到字典转换器,我可以发布该代码和一个例子,如果它是任何用到你,它只有~20行。

答案 1 :(得分:0)

ExpandoObject的成员可以在运行时动态添加和删除。