c# – 有没有办法让RazorEngine抛出异常,使用JSON作为数据模型渲染模板?

c# – 有没有办法让RazorEngine抛出异常,使用JSON作为数据模型渲染模板?,第1张

概述我正在尝试使用 RazorEngine作为我的模板语言在ASP.NET中设计一个电子邮件模板系统. RazorEngine采用电子邮件模板(作为字符串或.cshtml文件)并将其与数据模型组合以将输出生成为字符串.可以以多种格式提供数据模型. 例如: string template = "<h1>Hello @Model.name!</h1>";var model = new { name = 我正在尝试使用 RazorEngine作为我的模板语言在ASP.NET中设计一个电子邮件模板系统. RazorEngine采用电子邮件模板(作为字符串或.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>"

如果模板期望数据模型未提供的值,则假设数据模型作为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作为数据模型渲染模板?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1233164.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存