[英]Merge user defined html template with user defined json data
我正在尝试创建通用实用程序类来构建电子邮件模板正文,其中包含两个输入
预期输出是结合 html 模板和 jsondata 生成 html 文件。 由于我事先不知道所有模板或 json 数据模式,因此我可能必须使用 Dynamic/Expando 对象或与 Json 解析相关的类
这是示例示例 html
<ul id='products'>
{{ for product in products }}
<li>
<h2>{{ product.name }}</h2>
Price: {{ product.price }}
{{ product.description }}
</li>
{{ end }}
</ul>
样本数据
{
"products": [
{
"name": "Ball",
"price": 788.0,
"description": "Matches Ball"
},
{
"name": "Bat",
"price": 2000.0,
"description": "Wooden Bat"
}
]
}
我曾尝试使用https://github.com/lunet-io/scriban和https://www.nuget.org/packages/Newtonsoft.Json/但无法解决这些问题。 我愿意接受其他建议
public string RenderHtml(string templateHTML, string jsonData)
{
Scriban.Template template = Scriban.Template.Parse(templateHTML);
JObject jsonObject = JObject.Parse(jsonData);
return template.Render(jsonObject);
}
您可以反序列化该对象,并且(如果它很简单)将其映射到 Scriban 的脚本对象。
像这样:
private static string GenerateTemplate()
{
ExpandoObject reportData = JsonConvert.DeserializeObject<ExpandoObject>("{\"name\": \"Alejandro\"}");
var scriptObject = new Scriban.Runtime.ScriptObject();
foreach (var prop in obj)
{
scriptObject.Add(prop.Key, prop.Value);
}
var template = Template.Parse("<h1>{{name}}</h1>");
return template.Render(scriptObject, member => LowerFirstCharacter(member.Name));
}
private static string LowerFirstCharacter(string value)
{
if (value.Length > 1)
return char.ToLower(value[0]) + value.Substring(1);
return value;
}
希望能帮助到你,
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.