C# 如何替换电子邮件模板中的所有值?
我有一个电子邮件模板 比如这个 你好@FirstName@@LastName@ 我有一个对象,它来自一个具有属性的参数 我需要迭代所有对象属性,并用属性值替换所有与用“”引用的属性名称匹配的单词 例如,我有一个名为FirstName和LastName的对象,我需要迭代这个对象属性并在电子邮件中更改@FirstName@和@LastName@ 我试着写这个方法C# 如何替换电子邮件模板中的所有值?,c#,.net,replace,C#,.net,Replace,我有一个电子邮件模板 比如这个 你好@FirstName@@LastName@ 我有一个对象,它来自一个具有属性的参数 我需要迭代所有对象属性,并用属性值替换所有与用“”引用的属性名称匹配的单词 例如,我有一个名为FirstName和LastName的对象,我需要迭代这个对象属性并在电子邮件中更改@FirstName@和@LastName@ 我试着写这个方法 private string ReplaceTemplateValues(object input, string emailTempla
private string ReplaceTemplateValues(object input, string emailTemplate)
{
foreach(var property in input.GetType().GetProperties())
{
var replacedTemplate = emailTemplate.Replace($"@{property.Name}@", property);
}
}
但是如何在var replacedTemplate=emailTemplate.Replace($“@{property.Name}@”,property)中获取属性值代码>
并返回整个替换的字符串?我建议以另一种方式处理它:在模板字符串中查找@…
,并用输入对象中的值替换它。如果模板中碰巧有@X@
,但没有属性X,那么这也会表现得很好
要从模板中提取属性名称,可以使用正则表达式:
private string ReplaceTemplateValues(object input, string emailTemplate)
{
return Regex.Replace(emailTemplate, @"@(?<prop>\w+)@", m =>
{
var property = input.GetType().GetProperty(m.Groups["prop"].Value);
if (property != null)
{
var value = property.GetValue(input);
if (value != null)
return value.ToString();
}
return "";
});
}
private string ReplaceTemplateValues(对象输入,字符串emailTemplate)
{
返回Regex.Replace(emailTemplate,@“@(?\w+@”),m=>
{
var property=input.GetType().GetProperty(m.Groups[“prop”].Value);
if(属性!=null)
{
var value=property.GetValue(输入);
if(值!=null)
返回值.ToString();
}
返回“”;
});
}
正则表达式的解释(另请参见)
@
将匹配文字“@”
(?\w+
将至少匹配一个(即+
,请参阅)“单词字符”(即\w
,请参阅-我假设您的属性名称是这样表示的),并将结果放入名为“prop”的组中(请参阅)
@
将匹配另一个文本“@”
m.Groups[“prop”].Value
将为您获取匹配的组,即属性名称。就我个人而言,我使用的是此类内容(还有一个非核心版本,IIRC)。我不想使用Razor,我只需要替换并返回替换后的字符串@uwekeim即可获得值:property.GetValue(input)
它会返回字符串吗?我猜no@KlausGütterIt将返回属性的任何数据类型-您可以对返回的值调用.ToString()
。据我所知,如果找不到属性,它将返回空值?不理解这种结构(m.Groups[“prop”].Value)
,它是如何工作的?以及(?\w+)
正则表达式是如何工作的。还添加了一些关于regex的解释。似乎var属性
总是空的,当我发送这个对象时{“FirstName”:“Eugene”,“LastName”:“Sukhomlyn”}
这是一个JSON表示,你的C#类看起来怎么样?