@@ -98,24 +98,27 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format, Open
9898 Utils . CheckArgumentNull ( format , nameof ( format ) ) ;
9999 settings ??= new OpenApiReaderSettings ( ) ;
100100
101- MemoryStream bufferedStream ;
102- if ( input is MemoryStream stream )
101+ Stream preparedStream ;
102+
103+ // Avoid buffering for JSON documents
104+ if ( input is MemoryStream || format . Equals ( OpenApiConstants . Json , StringComparison . OrdinalIgnoreCase ) )
103105 {
104- bufferedStream = stream ;
106+ preparedStream = input ;
105107 }
106108 else
107109 {
108- // Buffer stream so that OpenApiTextReaderReader can process it synchronously
109- // YamlDocument doesn't support async reading.
110- bufferedStream = new MemoryStream ( ) ;
111- await input . CopyToAsync ( bufferedStream , 81920 , cancellationToken ) ;
112- bufferedStream . Position = 0 ;
110+ // Buffer stream for non-JSON formats (e.g., YAML) since they require synchronous reading
111+ preparedStream = new MemoryStream ( ) ;
112+ await input . CopyToAsync ( preparedStream , 81920 , cancellationToken ) ;
113+ preparedStream . Position = 0 ;
113114 }
114115
115- using var reader = new StreamReader ( bufferedStream , default , true , - 1 , settings . LeaveStreamOpen ) ;
116+ // Use StreamReader to process the prepared stream (buffered for YAML, direct for JSON)
117+ using var reader = new StreamReader ( preparedStream , default , true , - 1 , settings . LeaveStreamOpen ) ;
116118 return await LoadAsync ( reader , format , settings , cancellationToken ) ;
117119 }
118120
121+
119122 /// <summary>
120123 /// Loads the TextReader input and parses it into an Open API document.
121124 /// </summary>
0 commit comments