@@ -130,15 +130,22 @@ public override void WriteBinaryData(BsonBinaryData binaryData)
130
130
{
131
131
guidRepresentation = subType == BsonBinarySubType . UuidStandard ? GuidRepresentation . Standard : GuidRepresentation . Unspecified ;
132
132
}
133
- #pragma warning disable 618
133
+ #pragma warning restore 618
134
134
135
135
WriteNameHelper ( Name ) ;
136
136
switch ( Settings . OutputMode )
137
137
{
138
+ #pragma warning disable 618
138
139
case JsonOutputMode . Strict :
140
+ #pragma warning restore 618
139
141
_textWriter . Write ( "{{ \" $binary\" : \" {0}\" , \" $type\" : \" {1}\" }}" , Convert . ToBase64String ( bytes ) , ( ( int ) subType ) . ToString ( "x2" ) ) ;
140
142
break ;
141
143
144
+ case JsonOutputMode . CanonicalExtendedJson :
145
+ case JsonOutputMode . RelaxedExtendedJson :
146
+ _textWriter . Write ( "{{ \" $binary\" : {{ \" base64\" : \" {0}\" , \" subType\" : \" {1}\" }} }}" , Convert . ToBase64String ( bytes ) , ( ( int ) subType ) . ToString ( "x2" ) ) ;
147
+ break ;
148
+
142
149
case JsonOutputMode . Shell :
143
150
default :
144
151
switch ( subType )
@@ -200,10 +207,28 @@ public override void WriteDateTime(long value)
200
207
WriteNameHelper ( Name ) ;
201
208
switch ( Settings . OutputMode )
202
209
{
210
+ #pragma warning disable 618
203
211
case JsonOutputMode . Strict :
212
+ #pragma warning restore 618
204
213
_textWriter . Write ( "{{ \" $date\" : {0} }}" , value ) ;
205
214
break ;
206
215
216
+ case JsonOutputMode . RelaxedExtendedJson :
217
+ if ( value >= 0 && value <= BsonConstants . DateTimeMaxValueMillisecondsSinceEpoch )
218
+ {
219
+ var utcDateTime = BsonUtils . ToDateTimeFromMillisecondsSinceEpoch ( value ) ;
220
+ _textWriter . Write ( "{{ \" $date\" : \" {0}\" }}" , utcDateTime . ToString ( "yyyy-MM-ddTHH:mm:ss.FFFZ" ) ) ;
221
+ }
222
+ else
223
+ {
224
+ _textWriter . Write ( "{{ \" $date\" : {{ \" $numberLong\" : \" {0}\" }} }}" , value ) ;
225
+ }
226
+ break ;
227
+
228
+ case JsonOutputMode . CanonicalExtendedJson :
229
+ _textWriter . Write ( "{{ \" $date\" : {{ \" $numberLong\" : \" {0}\" }} }}" , value ) ;
230
+ break ;
231
+
207
232
case JsonOutputMode . Shell :
208
233
default :
209
234
// use ISODate for values that fall within .NET's DateTime range, and "new Date" for all others
@@ -239,6 +264,11 @@ public override void WriteDecimal128(Decimal128 value)
239
264
_textWriter . Write ( "NumberDecimal(\" {0}\" )" , value . ToString ( ) ) ;
240
265
break ;
241
266
267
+ #pragma warning disable 618
268
+ case JsonOutputMode . Strict :
269
+ #pragma warning restore 618
270
+ case JsonOutputMode . CanonicalExtendedJson :
271
+ case JsonOutputMode . RelaxedExtendedJson :
242
272
default :
243
273
_textWriter . Write ( "{{ \" $numberDecimal\" : \" {0}\" }}" , value . ToString ( ) ) ;
244
274
break ;
@@ -267,7 +297,29 @@ public override void WriteDouble(double value)
267
297
}
268
298
269
299
WriteNameHelper ( Name ) ;
270
- _textWriter . Write ( stringRepresentation ) ;
300
+ switch ( Settings . OutputMode )
301
+ {
302
+ case JsonOutputMode . CanonicalExtendedJson :
303
+ _textWriter . Write ( "{{ \" $numberDouble\" : \" {0}\" }}" , stringRepresentation ) ;
304
+ break ;
305
+ case JsonOutputMode . RelaxedExtendedJson :
306
+ if ( double . IsNaN ( value ) || double . IsInfinity ( value ) )
307
+ {
308
+ _textWriter . Write ( "{{ \" $numberDouble\" : \" {0}\" }}" , stringRepresentation ) ;
309
+ }
310
+ else
311
+ {
312
+ _textWriter . Write ( stringRepresentation ) ;
313
+ }
314
+ break ;
315
+ #pragma warning disable 618
316
+ case JsonOutputMode . Strict :
317
+ #pragma warning restore 618
318
+ case JsonOutputMode . Shell :
319
+ default :
320
+ _textWriter . Write ( stringRepresentation ) ;
321
+ break ;
322
+ }
271
323
272
324
State = GetNextState ( ) ;
273
325
}
@@ -349,7 +401,20 @@ public override void WriteInt32(int value)
349
401
}
350
402
351
403
WriteNameHelper ( Name ) ;
352
- _textWriter . Write ( value ) ;
404
+ switch ( Settings . OutputMode )
405
+ {
406
+ case JsonOutputMode . CanonicalExtendedJson :
407
+ _textWriter . Write ( "{{ \" $numberInt\" : \" {0}\" }}" , value ) ;
408
+ break ;
409
+ #pragma warning disable 618
410
+ case JsonOutputMode . Strict :
411
+ #pragma warning restore 618
412
+ case JsonOutputMode . RelaxedExtendedJson :
413
+ case JsonOutputMode . Shell :
414
+ default :
415
+ _textWriter . Write ( value ) ;
416
+ break ;
417
+ }
353
418
354
419
State = GetNextState ( ) ;
355
420
}
@@ -369,10 +434,17 @@ public override void WriteInt64(long value)
369
434
WriteNameHelper ( Name ) ;
370
435
switch ( Settings . OutputMode )
371
436
{
437
+ #pragma warning disable 618
372
438
case JsonOutputMode . Strict :
439
+ #pragma warning restore 618
440
+ case JsonOutputMode . RelaxedExtendedJson :
373
441
_textWriter . Write ( value ) ;
374
442
break ;
375
443
444
+ case JsonOutputMode . CanonicalExtendedJson :
445
+ _textWriter . Write ( "{{ \" $numberLong\" : \" {0}\" }}" , value ) ;
446
+ break ;
447
+
376
448
case JsonOutputMode . Shell :
377
449
default :
378
450
if ( value >= int . MinValue && value <= int . MaxValue )
@@ -441,7 +513,11 @@ public override void WriteMaxKey()
441
513
WriteNameHelper ( Name ) ;
442
514
switch ( Settings . OutputMode )
443
515
{
516
+ #pragma warning disable 618
444
517
case JsonOutputMode . Strict :
518
+ #pragma warning restore 618
519
+ case JsonOutputMode . CanonicalExtendedJson :
520
+ case JsonOutputMode . RelaxedExtendedJson :
445
521
_textWriter . Write ( "{ \" $maxKey\" : 1 }" ) ;
446
522
break ;
447
523
@@ -468,7 +544,11 @@ public override void WriteMinKey()
468
544
WriteNameHelper ( Name ) ;
469
545
switch ( Settings . OutputMode )
470
546
{
547
+ #pragma warning disable 618
471
548
case JsonOutputMode . Strict :
549
+ #pragma warning restore 618
550
+ case JsonOutputMode . CanonicalExtendedJson :
551
+ case JsonOutputMode . RelaxedExtendedJson :
472
552
_textWriter . Write ( "{ \" $minKey\" : 1 }" ) ;
473
553
break ;
474
554
@@ -513,7 +593,11 @@ public override void WriteObjectId(ObjectId objectId)
513
593
WriteNameHelper ( Name ) ;
514
594
switch ( Settings . OutputMode )
515
595
{
596
+ #pragma warning disable 618
516
597
case JsonOutputMode . Strict :
598
+ #pragma warning restore 618
599
+ case JsonOutputMode . CanonicalExtendedJson :
600
+ case JsonOutputMode . RelaxedExtendedJson :
517
601
_textWriter . Write ( "{{ \" $oid\" : \" {0}\" }}" , objectId . ToString ( ) ) ;
518
602
break ;
519
603
@@ -544,10 +628,17 @@ public override void WriteRegularExpression(BsonRegularExpression regex)
544
628
WriteNameHelper ( Name ) ;
545
629
switch ( Settings . OutputMode )
546
630
{
631
+ #pragma warning disable 618
547
632
case JsonOutputMode . Strict :
633
+ #pragma warning restore 618
548
634
_textWriter . Write ( "{{ \" $regex\" : \" {0}\" , \" $options\" : \" {1}\" }}" , EscapedString ( pattern ) , EscapedString ( options ) ) ;
549
635
break ;
550
636
637
+ case JsonOutputMode . CanonicalExtendedJson :
638
+ case JsonOutputMode . RelaxedExtendedJson :
639
+ _textWriter . Write ( "{{ \" $regularExpression\" : {{ \" pattern\" : \" {0}\" , \" options\" : \" {1}\" }} }}" , EscapedString ( pattern ) , EscapedString ( options ) ) ;
640
+ break ;
641
+
551
642
case JsonOutputMode . Shell :
552
643
default :
553
644
var escapedPattern = ( pattern == "" ) ? "(?:)" : pattern . Replace ( "/" , @"\/" ) ;
@@ -648,13 +739,17 @@ public override void WriteTimestamp(long value)
648
739
ThrowInvalidState ( "WriteTimestamp" , BsonWriterState . Value , BsonWriterState . Initial ) ;
649
740
}
650
741
651
- var secondsSinceEpoch = ( int ) ( ( value >> 32 ) & 0xffffffff ) ;
652
- var increment = ( int ) ( value & 0xffffffff ) ;
742
+ var secondsSinceEpoch = ( uint ) ( ( value >> 32 ) & 0xffffffff ) ;
743
+ var increment = ( uint ) ( value & 0xffffffff ) ;
653
744
654
745
WriteNameHelper ( Name ) ;
655
746
switch ( Settings . OutputMode )
656
747
{
748
+ #pragma warning disable 618
657
749
case JsonOutputMode . Strict :
750
+ #pragma warning restore 618
751
+ case JsonOutputMode . CanonicalExtendedJson :
752
+ case JsonOutputMode . RelaxedExtendedJson :
658
753
_textWriter . Write ( "{{ \" $timestamp\" : {{ \" t\" : {0}, \" i\" : {1} }} }}" , secondsSinceEpoch , increment ) ;
659
754
break ;
660
755
@@ -681,7 +776,11 @@ public override void WriteUndefined()
681
776
WriteNameHelper ( Name ) ;
682
777
switch ( Settings . OutputMode )
683
778
{
779
+ #pragma warning disable 618
684
780
case JsonOutputMode . Strict :
781
+ #pragma warning restore 618
782
+ case JsonOutputMode . CanonicalExtendedJson :
783
+ case JsonOutputMode . RelaxedExtendedJson :
685
784
_textWriter . Write ( "{ \" $undefined\" : true }" ) ;
686
785
break ;
687
786
0 commit comments