Шаблонный движок.Net с выводом графов объектов, а не строк
Я хотел бы знать, есть ли какой-либо шаблонизатор, который используется для создания графа объектов? Есть много, чтобы создать HTML или другое содержимое строки. Но я бы хотел шаблонизатор, который выплевывает объекты. Так сказать препроцессор.
У меня есть приложение, которому нужны какие-то предопределенные графы объектов, которые используются для визуализации определенного виджета страницы. Например, у меня есть панель инструментов на моих страницах, но каждая страница имеет свою панель инструментов. Это может выглядеть очень похоже. но, например, кнопка Добавить будет указывать на другой URL-адрес на одной странице, чем на другой.
Пример граф объекта (часть его):
IList<ToolbarItem> toolbar = new List<ToolbarItem> {
new ToolbarButton {
Text = PageResources.NewText,
Url = Url.Action("Add", "Items"),
Icon = ToolbarIconType.New
},
new ToolbarSeparator(),
new ToolbarDropDown {
Text = PageResources.DropDownText,
Icon = ToolbarIconType.Filter,
Items = new List<ToolbarDropDownItem> {
new ToolbarDropDownItem {
Text = PageResources.FirstItem,
Url = Url.Action("Whatever", "Filter")
},
new ToolbarDropDownItem {
Text = PageResources.SecondItem,
Url = Url.Action("BlahBlah", "Filter"),
Icon = ToolbarIconType.Search
},
...
}
},
...
};
Это статическое определение (с динамическими ресурсами и динамическими вызовами вспомогательных URL) может стать довольно длинным и сложным. Подумайте о ленточной панели инструментов, похожей на Word. Очень сложный и длинный.
Я хотел бы, чтобы эти шаблоны генерации объектов хранились в базе данных, и каждая страница могла бы читать свои собственные, шаблонизатор затем генерировал бы их и использовал бы определенный тип ресурса + ключ для помещения локализованных данных. То же самое было бы с действиями URL-адреса...
Нечто подобное делается при десериализации объекта (XML или JSON). но встроенные (де) технологии сериализации не поддерживают замены переменных, ссылки на ресурсы или аналогичные. Лучше всего будет поддерживать ссылки на ресурсы и лямбда-выражения.
Подводя итог: есть ли какой-либо движок / препроцессор шаблонов графа.net, который бы обеспечивал то, что мне нужно?
2 ответа
JSON сериализация
Я решил использовать библиотеку Json.Net главным образом потому, что написание строк JSON очень удобочитаемо для человека или, я бы лучше сказал, что веб-разработчик читабельно и легко поддерживается. Это очень похоже на обычный Javascript JSON, но с дополнительными синтаксическими сахарами (сохранение ссылок, сохранение типов и т. Д.)
Библиотека Json.NET является очень хорошим обновлением JavaScriptSerializer
или DataContractSerializer
классы.
Это очень интересный вопрос.
Я думаю, что один из вариантов будет генерировать XAML, а затем использовать XamlReader.Load
( см. MSDN) для загрузки дерева объектов (или графика), описанного XAML. Обратите внимание, что XAML можно использовать для создания любых объектов.NET, которые соответствуют некоторым базовым требованиям (например, имеют общедоступные свойства get / set и реализуют некоторый интерфейс, если они должны использоваться в качестве коллекций).
Кроме того, XAML является XML-документом, поэтому должна быть возможность использовать стандартные текстовые движки, которые могут создавать XML-файлы для генерации ваших XAML-документов.