Q:

How to add a placeholder curly braces in dictionary keys

So, I have a dictionary like below:
Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("first", "Value1");
dict.Add("second", "Value2");

And I have a string like below:
rawMsg = "My values are {first} and {second}.";

Output expected:
My values are Value1 and Value2.

String Formating Code:
public void Format(string rawMsg, Dictionary<string, object> dict)
{
    var temp = dict.Aggregate(rawMsg, (current, parameter) => current.Replace(parameter.Key, parameter.Value.ToString())); 
}

For above code to work, I need to add keys as below:
Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("{first}", "Value1"); // Notice the curly braces in Keys
dict.Add("{second}", "Value2");

But I don't want to add curly braces in the key. 
I want to append curly braces in my format Logic. 
Pseudo code:
public void Format(string rawMsg, Dictionary<string, object> dict)
{
    // loop through all the keys and append a curly braces in them.
    var temp = dict.Aggregate(rawMsg, (current, parameter) => current.Replace(parameter.Key, parameter.Value.ToString())); 
}

But I am don't know an efficient way to do it. Please guide me.

A:

Just add it when you need it?
public void Format(string rawMsg, Dictionary<string, object> dict)
{
    var temp = dict.Aggregate(rawMsg, (current, parameter) => current.Replace("{" + parameter.Key + "}", parameter.Value.ToString())); 
}

A:

If you are creating your own string interpolation, I suggest regular expressions, e.g.:
  Dictionary<string, object> dict = new Dictionary<string, object>() {
    {"first", "Value1" },
    {"second", "Value2" },
  };

  string rawMsg = "My values are {first} and {second}.";

  string result = Regex.Replace(
    rawMsg, 
   @"\{[^{}]+?\}", 
    match => dict[match.Value.Substring(1, match.Value.Length - 2)]?.ToString());

  Console.Write(result);

Outcome:
  My values are Value1 and Value2.

P.S. I've assumed that you want to make all changes in one go i.e. for
  Dictionary<string, object> dict = new Dictionary<string, object>() {
    {"first", "{second}" },
    {"second", "third" },
  };

  string rawMsg = "My values are {{first}} and {second}.";

The right answer is
  My values are {second} and third.

Not (we don't want to process second twice)
  My values are third and third.

