繁体   English   中英

将用户定义的 html 模板与用户定义的 json 数据合并

[英]Merge user defined html template with user defined json data

我正在尝试创建通用实用程序类来构建电子邮件模板正文,其中包含两个输入

  1. 带有占位符的 html 模板(它可以有重复的记录)
  2. json数据

预期输出是结合 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/scribanhttps://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM