stringtemplate .net динамический объект - PullRequest
0 голосов
/ 09 марта 2010

Я использую шаблон строки для рендеринга некоторого содержимого, но содержимое может быть переменным, поэтому не уверен, как его передать (используя .net / c #)

Основная идея заключается в том, что у меня есть список>, который должен заканчиваться параметрами, например

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 $, но они мне нужны внутри структуры. Поэтому мне нужно убедить строковый шаблон setAttribute в том, что я передаю объект со свойствами elem1 и elem2, хотя на самом деле у меня есть список KeyValuePairs.

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 апреля 2010

На самом деле очень маленькая переписать это должно работать. Вам нужно использовать словарь, и вы можете даже вкладывать их (используя 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 строк.

0 голосов
/ 16 января 2011

ExpandoObject * Члены могут динамически добавляться и удаляться во время выполнения.

...