
例如:
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>" 如果模板期望数据模型未提供的值,则假设数据模型作为C#对象提供,runcompile方法将抛出异常:
string template = "<h1>Hello @Model.name!</h1>";var model = new { };var result = Engine.Razor.runcompile(template,model);// TemplateCompilationException 这是我想要的非常有用的行为.但是,就我的目的而言,数据模型的源必须是JsON.通过在将JsON提供给RazorEngine之前将其解析为C#对象,可以轻松实现这一点:
String Json = @"{ name: 'World' }";var JsonModel = JsonConvert.DeserializeObject(Json);var result = Engine.Razor.runcompile(template,JsonModel);// result = "<h1>Hello World!</h1>" ,但问题是这个过程似乎破坏了编译过程中的类型检查:
String Json = @"{ }";var JsonModel = JsonConvert.DeserializeObject(Json);var result = Engine.Razor.runcompile(template,JsonModel);// result = "<h1>Hello !</h1>" 有没有办法可以将JsON解析为数据模型,这将保留模板所需的缺失数据的类型检查和编译时错误?
解决方法 在反序列化对象时,可以更改代码以使用ExpandoObjectConverter:var template = "<h1>Hello @Model.name!</h1>";var Json = @"{ }";var converter = new Newtonsoft.Json.Converters.ExpandoObjectConverter();var model = JsonConvert.DeserializeObject<System.Dynamic.ExpandoObject>(Json,converter);var result = Engine.Razor.runcompile(template,model); 当属性不存在时抛出异常,并在属性存在时返回预期结果.
@H_403_52@ 总结以上是内存溢出为你收集整理的c# – 有没有办法让RazorEngine抛出异常,使用JSON作为数据模型渲染模板?全部内容,希望文章能够帮你解决c# – 有没有办法让RazorEngine抛出异常,使用JSON作为数据模型渲染模板?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)