private bool GetValue(string name, out object value)
 {
     if (_allProperties.TryGetValue(name, out value))
     {
         if (name.StartsWith("@"))
         {
             value = StructuredPropertyFormatter.DestructureObject(value);
         }
     }
     else
     {
         value = "{" + name + "}";
     }
     return(true);
 }
 private void EnsureToString()
 {
     if (_toString == null)
     {
         EnsureMessageTemplate();
         EnsureAllProperties();
         var writer    = new StringWriter();
         var delimiter = "";
         if (_messageTemplate != null)
         {
             var messageFromTemplate = StringTemplate.Format(_messageTemplate, GetValue);
             writer.Write(messageFromTemplate);
             delimiter = "; ";
         }
         var excludeKeys = _messageTemplateKeys;
         excludeKeys.Add(MessageTemplateProperty);
         StructuredPropertyFormatter.FormatProperties(_allProperties, excludeKeys, writer, ref delimiter);
         _toString = writer.GetStringBuilder().ToString();
     }
 }