@@ -98,24 +98,27 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format, Open
98
98
Utils . CheckArgumentNull ( format , nameof ( format ) ) ;
99
99
settings ??= new OpenApiReaderSettings ( ) ;
100
100
101
- MemoryStream bufferedStream ;
102
- if ( input is MemoryStream stream )
101
+ Stream preparedStream ;
102
+
103
+ // Avoid buffering for JSON format
104
+ if ( input is MemoryStream || format . Equals ( OpenApiConstants . Json , StringComparison . OrdinalIgnoreCase ) )
103
105
{
104
- bufferedStream = stream ;
106
+ preparedStream = input ;
105
107
}
106
108
else
107
109
{
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 ;
113
114
}
114
115
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 ) ;
116
118
return await LoadAsync ( reader , format , settings , cancellationToken ) ;
117
119
}
118
120
121
+
119
122
/// <summary>
120
123
/// Loads the TextReader input and parses it into an Open API document.
121
124
/// </summary>
0 commit comments