@@ -132,90 +132,7 @@ protected override Expression VisitConditional(ConditionalExpression node)
132
132
/// <returns>The ConstantExpression.</returns>
133
133
protected override Expression VisitConstant ( ConstantExpression node )
134
134
{
135
- var value = node . Value ;
136
-
137
- var a = value as Array ;
138
- if ( a != null && a . Rank == 1 )
139
- {
140
- var elementType = a . GetType ( ) . GetElementType ( ) ;
141
- _sb . AppendFormat ( "{0}[]:{{ " , elementType . Name ) ;
142
- var separator = "" ;
143
- foreach ( var item in a )
144
- {
145
- _sb . Append ( separator ) ;
146
- _sb . Append ( item . ToJson ( ) ) ;
147
- separator = ", " ;
148
- }
149
- _sb . Append ( " }" ) ;
150
- return node ;
151
- }
152
-
153
- if ( value . GetType ( ) == typeof ( bool ) )
154
- {
155
- _sb . Append ( ( ( bool ) value ) ? "true" : "false" ) ;
156
- return node ;
157
- }
158
-
159
- if ( value . GetType ( ) == typeof ( DateTime ) )
160
- {
161
- var dt = ( DateTime ) value ;
162
-
163
- var formatted = dt . ToString ( "o" ) ;
164
- formatted = Regex . Replace ( formatted , @"\.0000000" , "" ) ;
165
- formatted = Regex . Replace ( formatted , @"0000[Z+-]" , "" ) ;
166
-
167
- if ( dt . Kind == DateTimeKind . Utc )
168
- {
169
- _sb . AppendFormat ( "DateTime:({0})" , formatted ) ;
170
- }
171
- else
172
- {
173
- _sb . AppendFormat ( "DateTime:({0}, {1})" , formatted , dt . Kind ) ;
174
- }
175
- return node ;
176
- }
177
-
178
- var e = value as Enum ;
179
- if ( e != null )
180
- {
181
- _sb . Append ( e . GetType ( ) . Name + "." + e . ToString ( ) ) ;
182
- return node ;
183
- }
184
-
185
- var regex = value as Regex ;
186
- if ( regex != null )
187
- {
188
- var pattern = regex . ToString ( ) ;
189
- var options = regex . Options ;
190
- _sb . Append ( "Regex:(@\" " ) ;
191
- _sb . Append ( pattern ) ;
192
- _sb . Append ( "\" " ) ;
193
- if ( options != RegexOptions . None )
194
- {
195
- _sb . AppendFormat ( ", {0}" , options . ToString ( ) ) ;
196
- }
197
- _sb . Append ( ")" ) ;
198
- return node ;
199
- }
200
-
201
- var s = value as string ;
202
- if ( s != null )
203
- {
204
- s = Regex . Replace ( s , @"([""\\])" , @"\\$1" ) ;
205
- _sb . Append ( "\" " ) ;
206
- _sb . Append ( s ) ;
207
- _sb . Append ( "\" " ) ;
208
- return node ;
209
- }
210
-
211
- if ( value . GetType ( ) == typeof ( TimeSpan ) )
212
- {
213
- var ts = ( TimeSpan ) value ;
214
- _sb . AppendFormat ( "TimeSpan:({0})" , ts . ToString ( ) ) ;
215
- return node ;
216
- }
217
-
218
- _sb . Append ( value . ToString ( ) ) ;
135
+ VisitValue ( node . Value ) ;
219
136
return node ;
220
137
}
221
138
@@ -504,5 +421,91 @@ private string PublicClassName(Type type)
504
421
}
505
422
return FriendlyClassName ( type ) ;
506
423
}
424
+
425
+ private void VisitValue ( object value )
426
+ {
427
+ var a = value as Array ;
428
+ if ( a != null && a . Rank == 1 )
429
+ {
430
+ var elementType = a . GetType ( ) . GetElementType ( ) ;
431
+ _sb . AppendFormat ( "{0}[]:{{ " , elementType . Name ) ;
432
+ var separator = "" ;
433
+ foreach ( var item in a )
434
+ {
435
+ _sb . Append ( separator ) ;
436
+ VisitValue ( item ) ;
437
+ separator = ", " ;
438
+ }
439
+ _sb . Append ( " }" ) ;
440
+ return ;
441
+ }
442
+
443
+ if ( value . GetType ( ) == typeof ( bool ) )
444
+ {
445
+ _sb . Append ( ( ( bool ) value ) ? "true" : "false" ) ;
446
+ return ;
447
+ }
448
+
449
+ if ( value . GetType ( ) == typeof ( DateTime ) )
450
+ {
451
+ var dt = ( DateTime ) value ;
452
+
453
+ var formatted = dt . ToString ( "o" ) ;
454
+ formatted = Regex . Replace ( formatted , @"\.0000000" , "" ) ;
455
+ formatted = Regex . Replace ( formatted , @"0000[Z+-]" , "" ) ;
456
+
457
+ if ( dt . Kind == DateTimeKind . Utc )
458
+ {
459
+ _sb . AppendFormat ( "DateTime:({0})" , formatted ) ;
460
+ }
461
+ else
462
+ {
463
+ _sb . AppendFormat ( "DateTime:({0}, {1})" , formatted , dt . Kind ) ;
464
+ }
465
+ return ;
466
+ }
467
+
468
+ var e = value as Enum ;
469
+ if ( e != null )
470
+ {
471
+ _sb . Append ( e . GetType ( ) . Name + "." + e . ToString ( ) ) ;
472
+ return ;
473
+ }
474
+
475
+ var regex = value as Regex ;
476
+ if ( regex != null )
477
+ {
478
+ var pattern = regex . ToString ( ) ;
479
+ var options = regex . Options ;
480
+ _sb . Append ( "Regex:(@\" " ) ;
481
+ _sb . Append ( pattern ) ;
482
+ _sb . Append ( "\" " ) ;
483
+ if ( options != RegexOptions . None )
484
+ {
485
+ _sb . AppendFormat ( ", {0}" , options . ToString ( ) ) ;
486
+ }
487
+ _sb . Append ( ")" ) ;
488
+ return ;
489
+ }
490
+
491
+ var s = value as string ;
492
+ if ( s != null )
493
+ {
494
+ s = Regex . Replace ( s , @"([""\\])" , @"\\$1" ) ;
495
+ _sb . Append ( "\" " ) ;
496
+ _sb . Append ( s ) ;
497
+ _sb . Append ( "\" " ) ;
498
+ return ;
499
+ }
500
+
501
+ if ( value . GetType ( ) == typeof ( TimeSpan ) )
502
+ {
503
+ var ts = ( TimeSpan ) value ;
504
+ _sb . AppendFormat ( "TimeSpan:({0})" , ts . ToString ( ) ) ;
505
+ return ;
506
+ }
507
+
508
+ _sb . Append ( value . ToString ( ) ) ;
509
+ }
507
510
}
508
511
}
0 commit comments