@@ -49,17 +49,19 @@ public string ToJson()
4949
5050 foreach ( var entry in Source )
5151 {
52+ // add to each property (expect first one)
53+ // ,\n for fomarring reasons.
54+ // without adding this condition at the beginning of the string builder,
55+ // we will generate invalid json with `,` character in the end of the json properties.
5256 if ( stringBuilder . Length != 3 )
5357 {
5458 stringBuilder . Append ( "," ) ;
5559 stringBuilder . AppendLine ( ) ;
5660 }
57- var key = EscapeKey ( entry . Key ) ;
58- stringBuilder . AppendFormat ( "\" {0}\" :" , key ) ;
59-
60- var value = entry . Value ;
61- var jsonValue = ConvertValue ( value ) ;
62- stringBuilder . Append ( jsonValue ) ;
61+ // add key
62+ stringBuilder . AppendFormat ( "\" {0}\" :" , EscapeString ( entry . Key ) ) ;
63+ // add value to key
64+ stringBuilder . Append ( ConvertValue ( entry . Value ) ) ;
6365 }
6466
6567 stringBuilder . AppendLine ( ) ;
@@ -73,7 +75,7 @@ public string ToJson()
7375 /// </summary>
7476 /// <param name="value">string to escape</param>
7577 /// <returns>escaped string</returns>
76- private string EscapeKey ( string value )
78+ private string EscapeString ( string value )
7779 {
7880 var output = new StringBuilder ( value . Length ) ;
7981 foreach ( char c in value )
@@ -132,11 +134,11 @@ private string ConvertValue(object value)
132134 }
133135 else if ( analysedType == typeof ( double ) )
134136 {
135- return Convert . ToDouble ( value , CultureInfo . CurrentCulture ) . ToString ( ) ;
137+ return Convert . ToDouble ( value , CultureInfo . CurrentCulture ) . ToString ( CultureInfo . InvariantCulture ) ;
136138 }
137139 else if ( analysedType == typeof ( float ) )
138140 {
139- return Convert . ToDouble ( value , CultureInfo . CurrentCulture ) . ToString ( ) ;
141+ return Convert . ToDouble ( value , CultureInfo . CurrentCulture ) . ToString ( CultureInfo . InvariantCulture ) ;
140142 }
141143 else if ( analysedType == typeof ( int ) )
142144 {
@@ -148,9 +150,9 @@ private string ConvertValue(object value)
148150 }
149151 else if ( analysedType == typeof ( string ) )
150152 {
151- return string . Format ( "\" {0}\" " , EscapeKey ( value as string ) ) ;
153+ return string . Format ( "\" {0}\" " , EscapeString ( value as string ) ) ;
152154 }
153- else if ( value is IEnumerable )
155+ else if ( value is IEnumerable && ! ( value is IDictionary ) )
154156 {
155157 var collection = ( value as IEnumerable ) ;
156158 var builder = new StringBuilder ( ) ;
0 commit comments