88using  System . IO ; 
99using  System . Linq ; 
1010using  System . Text ; 
11+ using  System . Text . Encodings . Web ; 
12+ using  System . Text . Json ; 
1113using  System . Text . Json . Nodes ; 
14+ using  System . Text . Json . Serialization ; 
1215using  FluentAssertions ; 
1316using  Microsoft . OpenApi . Any ; 
1417using  Microsoft . OpenApi . Models ; 
1518using  Microsoft . OpenApi . Writers ; 
16- using  Newtonsoft . Json ; 
1719using  Xunit ; 
1820
1921namespace  Microsoft . OpenApi . Tests . Writers 
@@ -62,9 +64,9 @@ public void WriteStringListAsJsonShouldMatchExpected(string[] stringValues, bool
6264            writer . WriteEndArray ( ) ; 
6365            writer . Flush ( ) ; 
6466
65-             var  parsedObject  =  JsonConvert . DeserializeObject ( outputString . GetStringBuilder ( ) . ToString ( ) ) ; 
67+             var  parsedObject  =  JsonSerializer . Deserialize < List < string > > ( outputString . GetStringBuilder ( ) . ToString ( ) ) ; 
6668            var  expectedObject  = 
67-                 JsonConvert . DeserializeObject ( JsonConvert . SerializeObject ( new  List < string > ( stringValues ) ) ) ; 
69+                 JsonSerializer . Deserialize < List < string > > ( JsonSerializer . Serialize ( new  List < string > ( stringValues ) ) ) ; 
6870
6971            // Assert 
7072            parsedObject . Should ( ) . BeEquivalentTo ( expectedObject ) ; 
@@ -222,17 +224,17 @@ private void WriteValueRecursive(OpenApiJsonWriter writer, object value)
222224        public  void  WriteMapAsJsonShouldMatchExpected ( IDictionary < string ,  object >  inputMap ,  bool  produceTerseOutput ) 
223225        { 
224226            // Arrange 
225-             var  outputString  =  new  StringWriter ( CultureInfo . InvariantCulture ) ; 
227+             using   var  outputString  =  new  StringWriter ( CultureInfo . InvariantCulture ) ; 
226228            var  writer  =  new  OpenApiJsonWriter ( outputString ,  new ( )  {  Terse  =  produceTerseOutput  } ) ; 
227229
228230            // Act 
229231            WriteValueRecursive ( writer ,  inputMap ) ; 
230232
231-             var  parsedObject  =  JsonConvert . DeserializeObject ( outputString . GetStringBuilder ( ) . ToString ( ) ) ; 
232-             var  expectedObject  =  JsonConvert . DeserializeObject ( JsonConvert . SerializeObject ( inputMap ) ) ; 
233+             using   var  parsedObject  =  JsonDocument . Parse ( outputString . GetStringBuilder ( ) . ToString ( ) ) ; 
234+             using   var  expectedObject  =  JsonDocument . Parse ( JsonSerializer . Serialize ( inputMap ,   _jsonSerializerOptions . Value ) ) ; 
233235
234236            // Assert 
235-             parsedObject . Should ( ) . BeEquivalentTo ( expectedObject ) ; 
237+             Assert . True ( JsonElement . DeepEquals ( parsedObject . RootElement ,   expectedObject . RootElement ) ) ; 
236238        } 
237239
238240        public  static IEnumerable < object [ ] >  WriteDateTimeAsJsonTestCases ( ) 
@@ -248,6 +250,57 @@ from shouldBeTerse in shouldProduceTerseOutputValues
248250                select  new  object [ ]  {  input ,  shouldBeTerse  } ; 
249251        } 
250252
253+         public  class  CustomDateTimeOffsetConverter  :  JsonConverter < DateTimeOffset > 
254+         { 
255+             public  CustomDateTimeOffsetConverter ( string  format ) 
256+             { 
257+                 ArgumentException . ThrowIfNullOrEmpty ( format ) ; 
258+                 Format  =  format ; 
259+             } 
260+ 
261+             public  string  Format  {  get ;  } 
262+ 
263+             public  override  DateTimeOffset  Read ( ref  Utf8JsonReader  reader ,  Type  typeToConvert ,  JsonSerializerOptions  options ) 
264+             { 
265+                 return  DateTime . ParseExact ( reader . GetString ( ) ,  Format ,  CultureInfo . InvariantCulture ) ; 
266+             } 
267+ 
268+             public  override  void  Write ( Utf8JsonWriter  writer ,  DateTimeOffset  value ,  JsonSerializerOptions  options ) 
269+             { 
270+                 writer . WriteStringValue ( value . ToString ( Format ) ) ; 
271+             } 
272+         } 
273+         public  class  CustomDateTimeConverter  :  JsonConverter < DateTime > 
274+         { 
275+             public  CustomDateTimeConverter ( string  format ) 
276+             { 
277+                 ArgumentException . ThrowIfNullOrEmpty ( format ) ; 
278+                 Format  =  format ; 
279+             } 
280+ 
281+             public  string  Format  {  get ;  } 
282+ 
283+             public  override  DateTime  Read ( ref  Utf8JsonReader  reader ,  Type  typeToConvert ,  JsonSerializerOptions  options ) 
284+             { 
285+                 return  DateTime . ParseExact ( reader . GetString ( ) ,  Format ,  CultureInfo . InvariantCulture ) ; 
286+             } 
287+ 
288+             public  override  void  Write ( Utf8JsonWriter  writer ,  DateTime  value ,  JsonSerializerOptions  options ) 
289+             { 
290+                 writer . WriteStringValue ( value . ToString ( Format ) ) ; 
291+             } 
292+         } 
293+         private  static readonly  Lazy < JsonSerializerOptions >  _jsonSerializerOptions  =  new ( ( )  => 
294+         { 
295+             var  options  =  new  JsonSerializerOptions 
296+             { 
297+                 Encoder  =  JavaScriptEncoder . UnsafeRelaxedJsonEscaping 
298+             } ; 
299+             options . Converters . Add ( new  CustomDateTimeOffsetConverter ( "yyyy-MM-ddTHH:mm:ss.fffffffK" ) ) ; 
300+             options . Converters . Add ( new  CustomDateTimeConverter ( "yyyy-MM-ddTHH:mm:ss.fffffffK" ) ) ; 
301+             return  options ; 
302+         } ) ; 
303+ 
251304        [ Theory ] 
252305        [ MemberData ( nameof ( WriteDateTimeAsJsonTestCases ) ) ] 
253306        public  void  WriteDateTimeAsJsonShouldMatchExpected ( DateTimeOffset  dateTimeOffset ,  bool  produceTerseOutput ) 
@@ -260,10 +313,7 @@ public void WriteDateTimeAsJsonShouldMatchExpected(DateTimeOffset dateTimeOffset
260313            writer . WriteValue ( dateTimeOffset ) ; 
261314
262315            var  writtenString  =  outputString . GetStringBuilder ( ) . ToString ( ) ; 
263-             var  expectedString  =  JsonConvert . SerializeObject ( dateTimeOffset ,  new  JsonSerializerSettings 
264-             { 
265-                 DateFormatString  =  "yyyy-MM-ddTHH:mm:ss.fffffffK" , 
266-             } ) ; 
316+             var  expectedString  =  JsonSerializer . Serialize ( dateTimeOffset ,  _jsonSerializerOptions . Value ) ; 
267317
268318            // Assert 
269319            writtenString . Should ( ) . Be ( expectedString ) ; 
0 commit comments