static void SerializeRecursiveDictionaryImpl(IEnumerable<KeyValuePair<string, object>> dictionary, HRONWriterVisitor visitor) { foreach (var kv in dictionary) { var key = kv.Key.ToSubString(); var innerDictionary = kv.Value as IEnumerable<KeyValuePair<string, object>>; if (innerDictionary != null) { visitor.Object_Begin(key); SerializeRecursiveDictionaryImpl( innerDictionary, visitor ); visitor.Object_End(key); } else { visitor.Value_Begin(key); var value = kv.Value; if (value != null) { var formattable = value as IFormattable; var valueAsString = formattable != null ? formattable.ToString("", CultureInfo.InvariantCulture) : value.ToString() ; var lines = valueAsString.ReadLines(); foreach (var line in lines) { visitor.Value_Line(line); } } visitor.Value_End(key); } } }