DotLiquid - Словарь‹строка,строка› как параметр

Предположим, у меня есть следующий шаблон:

Привет {{имя}}! Добро пожаловать обратно в {{ блог }}. Дата последнего входа в систему: {{ date }}.

Пользователю разрешено вводить как шаблон, так и заполнители/переменные, поэтому я не могу сказать, какими будут заполнители.

Я думал создать что-то вроде этого:

public string Render(string text, Dictionary<string,string> placeholders)
{
    Template template = Template.Parse(text);
    return template.Render(Hash.FromSomething(placeholders));
}

Существует метод FromDictionary, который принимает словарь, и я не очень понимаю, как он работает. Другой альтернативой является FromAnonymousObject, но я не знаю, как преобразовать Dictionary в анонимный объект, чтобы он соответствовал цели.

Благодарим за любую идею!


person user2642287    schedule 09.01.2015    source источник


Ответы (1)


Hash.FromDictionary действительно тот метод, который вам нужен. Я думаю, вы были очень близки к ответу - вам просто нужно преобразовать Dictionary<string, string> в Dictionary<string, object>. (Значения object, потому что вы можете включать туда вложенные объекты в дополнение к примитивным типам.)

public string Render(string text, Dictionary<string,string> placeholders)
{
    Template template = Template.Parse(text);
    Dictionary<string, object> convertedPlaceholders =
        placeholders.ToDictionary(kvp => kvp.Key, kvp => (object) kvp.Value);
    return template.Render(Hash.FromDictionary(convertedPlaceholders));
}

(Я ввел это в SO, не компилируя, поэтому извиняюсь, если есть ошибки. Дайте мне знать, и я обновлю ответ.)

person Tim Jones    schedule 12.01.2015
comment
благодарю вас. Единственное, что я не понял с самого начала и продолжал делать неправильно, это то, что в словаре я передавал ключ в следующем формате: {{ keyName }}, а не просто keyName. - person user2642287; 16.01.2015