我正在尝试在ASP.NET中使用
RazorEngine
作为我的模板语言。RazoEngine接受一个电子邮件模板(作为一个字符串或.cshtml文件),并将其与一个数据模型相结合,以字符串形式生成输出。数据模型可以以多种格式提供。
例如:
string template = "<h1>Hello @Model.name!</h1>";
var model = new { name = "world" };
var result = Engine.Razor.RunCompile(template, "templateKey", null, model);
// result = "<h1>Hello world!</h1>"
如果模板期望的值不是数据模型提供的,则runcompile方法将引发异常,前提是数据模型是作为C对象提供的:
string template = "<h1>Hello @Model.name!</h1>";
var model = new { };
var result = Engine.Razor.RunCompile(template, "templateKey", null, model);
// TemplateCompilationException
这是我想要的非常有用的行为。但是,就我而言,数据模型的源必须是JSON。在将JSON提供给RazoEngine之前,可以很容易地将其解析为C对象:
String json = @"{ name: 'World' }";
var jsonModel = JsonConvert.DeserializeObject(json);
var result = Engine.Razor.RunCompile(template, "templateKey", null, jsonModel);
// result = "<h1>Hello world!</h1>"
但问题是,此过程似乎会破坏编译过程中的类型检查:
String json = @"{ }";
var jsonModel = JsonConvert.DeserializeObject(json);
var result = Engine.Razor.RunCompile(template, "templateKey", null, jsonModel);
// result = "<h1>Hello !</h1>"
有没有一种方法可以将JSON解析为一个数据模型,它将保留模板所期望的丢失数据的类型检查和编译时错误?