我想知道是否有用于对象图创建的模板引擎?创建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)上完成了类似的操作。但内置(反)序列化技术不支持变量替换或资源链接等。最好的办法是支持资源链接和lambda表达式。
总结一下:有没有提供我需要的.net对象图模板引擎/预处理器?
答案 0 :(得分:1)
这是一个非常有趣的问题。
我认为一个选项是生成XAML,然后使用XamlReader.Load
(see MSDN)来加载XAML描述的对象树(或图形)。请注意,XAML可用于构造遵循某些基本要求的任何.NET对象(例如,如果它们可用作集合,则具有公共get / set属性并实现某些接口)。
此外,XAML是一个XML文档,因此应该可以使用stnadard文本模板引擎来生成XML文件以生成XAML文档。
答案 1 :(得分:0)
我决定使用Json.Net库主要是因为编写JSON字符串非常易读,或者我应该说 Web开发人员可读并且易于维护。它与普通的Javascript JSON非常相似,但有额外的语法糖(参考保存,类型保存等)。
Json.NET库是对提供的JavaScriptSerializer
或DataContractSerializer
类进行的非常好的升级。