.Net模板引擎,带有对象图输出,而不是字符串

时间:2010-11-25 21:25:24

标签: .net templating object-graph

我想知道是否有用于对象图创建的模板引擎?创建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对象图模板引擎/预处理器

2 个答案:

答案 0 :(得分:1)

这是一个非常有趣的问题。

我认为一个选项是生成XAML,然后使用XamlReader.Loadsee MSDN)来加载XAML描述的对象树(或图形)。请注意,XAML可用于构造遵循某些基本要求的任何.NET对象(例如,如果它们可用作集合,则具有公共get / set属性并实现某些接口)。

此外,XAML是一个XML文档,因此应该可以使用stnadard文本模板引擎来生成XML文件以生成XAML文档。

答案 1 :(得分:0)

JSON序列化

我决定使用Json.Net库主要是因为编写JSON字符串非常易读,或者我应该说 Web开发人员可读并且易于维护。它与普通的Javascript JSON非常相似,但有额外的语法糖(参考保存,类型保存等)。

Json.NET库是对提供的JavaScriptSerializerDataContractSerializer类进行的非常好的升级。

相关问题