微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从变量创建动态 JSON 密钥?

如何解决如何从变量创建动态 JSON 密钥?

我们的电子学习平台使用名为 SendGrid 的第三方电子邮件服务来发送我们的电子邮件。我们将一个 JSON 对象传递给平台,我们的模板使用 Handlebars 动态填充来自 JSON 对象的值。

我们传递的典型 JSON 对象如下所示:

{
   "To": "abc@xyz.com","From": "zxy@abc.com","Subject": "Online Course","TemplateData": {
      "CourseName": "Course 1","LoginPage": "https://www.login.com"
   }   
}

我们开始实施多语言支持。我们可以将 Handlebars 添加到我们的模板中以执行条件 if-then 语句,以根据传入的语言动态填充正确的翻译文本。 所以我设想使用我们传入的语言向 TemplateData 添加一个新的 Language 键,如如下:

"TemplateData": {
      "CourseName": "Course 1","Language": "en-US","LoginPage": "https://www.login.com"
   }   

不幸的是,我意识到他们在 Handlebars 中的 if-else 条件只支持布尔比较,所以它必须看起来像这样:

"TemplateData": {
      "CourseName": "Course 1","en-US": true
      "LoginPage": "https://www.login.com"
   }   

由于语言部分(例如 en-US、en-CA、fr-FR 等)是从存储过程传入​​的变量,因此我不能仅在对象定义中静态设置语言键。

反序列化后的对象如下:

public abstract class CpiEmailMessage : IEmailMessage
{
   public string To { get; protected set; }
   protected static string FromEmail => "noreply@cpilearning.com";
   protected static string FromName => "CPI Learning";

   protected Dictionary<string,string> CustomArgs(int emailLogId) => new 
                      Dictionary<string,string>
   {
       { "SystemSource","HoneyBee.Integrations" },{ "Env",ConfigurationManager.AppSettings.Get("Env") },{ "EmailLogId",$"{emailLogId}" }
   };

   public abstract EmailSendRequest ToEmailSendRequest(int emailLogId);
   public abstract EmailLog ToLogEmailCommandRequest(int currentUser,bool sent);
 }

public class PurchaseEmailMessage : CpiEmailMessage
{
    private string Subject { get; }
    public string CourseName { get; }
    public string CourseLanguage { get; set; }
    public string LoginPage { get; set; }
    
    public string Url { get; }
    public string OnlineOnly { get; }

    private static EmailType MessageTemplateKey => EmailType.PURCHASE;

 public PurchaseEmailMessage(string to,string subject,string courseName,string courseLanguage,string loginPage,string cmsURL,string onlineOnly)
 {
      To = to;
      Subject = subject;
      CourseName = courseName;
      CourseLanguage = courseLanguage;
      LoginPage = loginPage;
      Url= cmsURL;
      OnlineOnly = onlineOnly;
  }

  public override EmailSendRequest ToEmailSendRequest(int emailLogId)
  {
       return new EmailSendRequest
       {
            To = To,FromEmail = FromEmail,FromName = FromName,Subject = Subject,MessageTemplateKey = MessageTemplateKey,TemplateData = new
            {
                Course = CourseName,LoginUrl = LoginPage
            },CustomArgs = CustomArgs(emailLogId),EmailLogId = emailLogId,Categories = new List<string> { "Seat Purchase" }
        };
    }
}

如何获取语言变量 (en-US) 并使其成为 TemplateData 中具有“true”值的键?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。