From 6115e5fbfe1886e3b072a1a66cd69568f1d57314 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Mon, 8 Dec 2025 18:16:25 +0000
Subject: [PATCH 001/388] chore(support/v2): release 2.3.11
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 9 +++++++++
Directory.Build.props | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 380448567..bf97149fe 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.3.10"
+ ".": "2.3.11"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4c809876c..e74aada15 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## [2.3.11](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.10...v2.3.11) (2025-12-08)
+
+
+### Bug Fixes
+
+* additional properties serialization should not emit a schema in v2 ([946cba9](https://github.com/microsoft/OpenAPI.NET/commit/946cba992a2733a60182453e38722b4ed789b729))
+* additional properties serialization should not emit a schema in v2 fix: additional properties serialization should not emit booleans in v3.1+ ([275dd9d](https://github.com/microsoft/OpenAPI.NET/commit/275dd9d7525b1f490eccaf1e6e60829ae51bdf5d))
+* additional properties serialization should not emit booleans in v3.1+ ([946cba9](https://github.com/microsoft/OpenAPI.NET/commit/946cba992a2733a60182453e38722b4ed789b729))
+
## [2.3.10](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.9...v2.3.10) (2025-11-17)
diff --git a/Directory.Build.props b/Directory.Build.props
index 3f2536c56..77209392f 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.3.10
+ 2.3.11
From 2436d7382bfbf8b9ba501d88f682e952bdf27146 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Thu, 11 Dec 2025 12:51:07 -0500
Subject: [PATCH 002/388] fix: non-seekable json streams would fail to load as
a document
---
.../Reader/OpenApiModelFactory.cs | 20 +--
.../Reader/OpenApiModelFactoryTests.cs | 166 ++++++++++++++++++
2 files changed, 172 insertions(+), 14 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
index 6f02d9426..9903f7329 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
@@ -403,20 +403,12 @@ private static string InspectStreamFormat(Stream stream)
// Inspect the format from the buffered portion
format ??= InspectStreamFormat(bufferStream);
- // If format is JSON, no need to buffer further — use the original stream.
- if (format.Equals(OpenApiConstants.Json, StringComparison.OrdinalIgnoreCase))
- {
- preparedStream = input;
- }
- else
- {
- // YAML or other non-JSON format; copy remaining input to a new stream.
- preparedStream = new MemoryStream();
- bufferStream.Position = 0;
- await bufferStream.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false); // Copy buffered portion
- await input.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false); // Copy remaining data
- preparedStream.Position = 0;
- }
+ // we need to copy the stream to memory string we've already started reading it and can't reposition it
+ preparedStream = new MemoryStream();
+ bufferStream.Position = 0;
+ await bufferStream.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false); // Copy buffered portion
+ await input.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false); // Copy remaining data
+ preparedStream.Position = 0;
}
else
{
diff --git a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
index 26bd6d472..bc7571b4e 100644
--- a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
@@ -3,6 +3,7 @@
using System.Threading.Tasks;
using System.IO;
using System;
+using System.Threading;
namespace Microsoft.OpenApi.Tests.Reader;
@@ -119,4 +120,169 @@ await File.WriteAllTextAsync(tempFilePathReferrer,
Assert.NotNull(readResult.Document.Components);
Assert.Equal(baseUri, readResult.Document.BaseUri);
}
+ [Fact]
+ public async Task CanLoadANonSeekableStream()
+ {
+ // Given
+ var documentJson =
+"""
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "Sample API",
+ "version": "1.0.0"
+ },
+ "paths": {}
+}
+""";
+ using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(documentJson));
+ using var nonSeekableStream = new NonSeekableStream(memoryStream);
+
+ // When
+ var (document, _) = await OpenApiDocument.LoadAsync(nonSeekableStream);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
+ public sealed class NonSeekableStream : Stream
+ {
+ private readonly Stream _innerStream;
+ public NonSeekableStream(Stream stream) : base()
+ {
+ _innerStream = stream;
+ }
+ public override bool CanSeek => false;
+
+ public override long Position { get => _innerStream.Position; set => throw new InvalidOperationException("Seeking is not supported."); }
+
+ public override bool CanRead => _innerStream.CanRead;
+
+ public override bool CanWrite => _innerStream.CanWrite;
+
+ public override long Length => _innerStream.Length;
+ public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
+ {
+ return _innerStream.BeginRead(buffer, offset, count, callback, state);
+ }
+
+ public override void Flush()
+ {
+ _innerStream.Flush();
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ return _innerStream.Read(buffer, offset, count);
+ }
+
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ throw new NotSupportedException("Seeking is not supported.");
+ }
+
+ public override void SetLength(long value)
+ {
+ _innerStream.SetLength(value);
+ }
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ _innerStream.Write(buffer, offset, count);
+ }
+ protected override void Dispose(bool disposing)
+ {
+ _innerStream.Dispose();
+ base.Dispose(disposing);
+ }
+
+ public override async ValueTask DisposeAsync()
+ {
+ await _innerStream.DisposeAsync();
+ await base.DisposeAsync();
+ }
+
+ public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
+ {
+ return _innerStream.CopyToAsync(destination, bufferSize, cancellationToken);
+ }
+
+ public override bool CanTimeout => _innerStream.CanTimeout;
+
+ public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
+ {
+ return _innerStream.BeginWrite(buffer, offset, count, callback, state);
+ }
+
+ public override void CopyTo(Stream destination, int bufferSize)
+ {
+ _innerStream.CopyTo(destination, bufferSize);
+ }
+
+ public override void Close()
+ {
+ _innerStream.Close();
+ }
+
+ public override int EndRead(IAsyncResult asyncResult)
+ {
+ return _innerStream.EndRead(asyncResult);
+ }
+
+ public override void EndWrite(IAsyncResult asyncResult)
+ {
+ _innerStream.EndWrite(asyncResult);
+ }
+
+ public override int ReadByte()
+ {
+ return _innerStream.ReadByte();
+ }
+
+ public override void WriteByte(byte value)
+ {
+ _innerStream.WriteByte(value);
+ }
+
+ public override Task FlushAsync(CancellationToken cancellationToken)
+ {
+ return _innerStream.FlushAsync(cancellationToken);
+ }
+
+ public override int Read(Span buffer)
+ {
+ return _innerStream.Read(buffer);
+ }
+
+ public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
+ {
+ return _innerStream.ReadAsync(buffer, offset, count, cancellationToken);
+ }
+
+ public override ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default)
+ {
+ return _innerStream.ReadAsync(buffer, cancellationToken);
+ }
+
+ public override int ReadTimeout { get => _innerStream.ReadTimeout; set => _innerStream.ReadTimeout = value; }
+
+ public override void Write(ReadOnlySpan buffer)
+ {
+ _innerStream.Write(buffer);
+ }
+
+ public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
+ {
+ return _innerStream.WriteAsync(buffer, offset, count, cancellationToken);
+ }
+
+ public override ValueTask WriteAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default)
+ {
+ return _innerStream.WriteAsync(buffer, cancellationToken);
+ }
+
+ public override int WriteTimeout { get => _innerStream.WriteTimeout; set => _innerStream.WriteTimeout = value; }
+
+ }
}
From f9e524859722476b3111cb6006f77208c2d1f526 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Thu, 11 Dec 2025 14:34:46 -0500
Subject: [PATCH 003/388] fix: reading streams in an asp.net context would
cause async exceptions
---
.../Reader/OpenApiModelFactory.cs | 112 ++++++----
.../Reader/OpenApiModelFactoryTests.cs | 208 +++++++++++++++++-
2 files changed, 275 insertions(+), 45 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
index 9903f7329..06c60889d 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using System;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Security;
@@ -362,7 +363,23 @@ private static string InspectInputFormat(string input)
return input.StartsWith("{", StringComparison.OrdinalIgnoreCase) || input.StartsWith("[", StringComparison.OrdinalIgnoreCase) ? OpenApiConstants.Json : OpenApiConstants.Yaml;
}
- private static string InspectStreamFormat(Stream stream)
+ ///
+ /// Reads the initial bytes of the stream to determine if it is JSON or YAML.
+ ///
+ ///
+ /// It is important NOT TO change the stream type from MemoryStream.
+ /// In Asp.Net core 3.0+ we could get passed a stream from a request or response body.
+ /// In such case, we CAN'T use the ReadByte method as it throws NotSupportedException.
+ /// Therefore, we need to ensure that the stream is a MemoryStream before calling this method.
+ /// Maintaining this type ensures there won't be any unforeseen wrong usage of the method.
+ ///
+ /// The stream to inspect
+ /// The format of the stream.
+ private static string InspectStreamFormat(MemoryStream stream)
+ {
+ return TryInspectStreamFormat(stream, out var format) ? format! : throw new InvalidOperationException("Could not determine the format of the stream.");
+ }
+ private static bool TryInspectStreamFormat(Stream stream, out string? format)
{
#if NET6_0_OR_GREATER
ArgumentNullException.ThrowIfNull(stream);
@@ -370,57 +387,74 @@ private static string InspectStreamFormat(Stream stream)
if (stream is null) throw new ArgumentNullException(nameof(stream));
#endif
- long initialPosition = stream.Position;
- int firstByte = stream.ReadByte();
-
- // Skip whitespace if present and read the next non-whitespace byte
- if (char.IsWhiteSpace((char)firstByte))
+ try
{
- firstByte = stream.ReadByte();
- }
+ var initialPosition = stream.Position;
+ var firstByte = (char)stream.ReadByte();
+
+ // Skip whitespace if present and read the next non-whitespace byte
+ if (char.IsWhiteSpace(firstByte))
+ {
+ firstByte = (char)stream.ReadByte();
+ }
- stream.Position = initialPosition; // Reset the stream position to the beginning
+ stream.Position = initialPosition; // Reset the stream position to the beginning
- char firstChar = (char)firstByte;
- return firstChar switch
+ format = firstByte switch
+ {
+ '{' or '[' => OpenApiConstants.Json, // If the first character is '{' or '[', assume JSON
+ _ => OpenApiConstants.Yaml // Otherwise assume YAML
+ };
+ return true;
+ }
+ catch (NotSupportedException)
+ {
+ // https://github.com/dotnet/aspnetcore/blob/c9d0750396e1d319301255ba61842721ab72ab10/src/Servers/Kestrel/Core/src/Internal/Http/HttpResponseStream.cs#L40
+ }
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER
+ catch (InvalidOperationException ex) when (ex.Message.Contains("AllowSynchronousIO", StringComparison.Ordinal))
+#else
+ catch (InvalidOperationException ex) when (ex.Message.Contains("AllowSynchronousIO"))
+#endif
{
- '{' or '[' => OpenApiConstants.Json, // If the first character is '{' or '[', assume JSON
- _ => OpenApiConstants.Yaml // Otherwise assume YAML
- };
+ // https://github.com/dotnet/aspnetcore/blob/c9d0750396e1d319301255ba61842721ab72ab10/src/Servers/HttpSys/src/RequestProcessing/RequestStream.cs#L100-L108
+ // https://github.com/dotnet/aspnetcore/blob/c9d0750396e1d319301255ba61842721ab72ab10/src/Servers/IIS/IIS/src/Core/HttpRequestStream.cs#L24-L30
+ // https://github.com/dotnet/aspnetcore/blob/c9d0750396e1d319301255ba61842721ab72ab10/src/Servers/Kestrel/Core/src/Internal/Http/HttpRequestStream.cs#L54-L60
+ }
+ format = null;
+ return false;
}
+ private static async Task CopyToMemoryStreamAsync(Stream input, CancellationToken token)
+ {
+ var bufferStream = new MemoryStream();
+#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER
+ await input.CopyToAsync(bufferStream, token).ConfigureAwait(false);
+#else
+ await input.CopyToAsync(bufferStream, 81920, token).ConfigureAwait(false);
+#endif
+ bufferStream.Position = 0;
+ return bufferStream;
+ }
+
private static async Task<(Stream, string)> PrepareStreamForReadingAsync(Stream input, string? format, CancellationToken token = default)
{
Stream preparedStream = input;
- if (!input.CanSeek)
+ if (input is MemoryStream ms)
{
- // Use a temporary buffer to read a small portion for format detection
- using var bufferStream = new MemoryStream();
- await input.CopyToAsync(bufferStream, 1024, token).ConfigureAwait(false);
- bufferStream.Position = 0;
-
- // Inspect the format from the buffered portion
- format ??= InspectStreamFormat(bufferStream);
-
- // we need to copy the stream to memory string we've already started reading it and can't reposition it
- preparedStream = new MemoryStream();
- bufferStream.Position = 0;
- await bufferStream.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false); // Copy buffered portion
- await input.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false); // Copy remaining data
- preparedStream.Position = 0;
+ format ??= InspectStreamFormat(ms);
}
- else
+ else if (!input.CanSeek)
{
- format ??= InspectStreamFormat(input);
-
- if (!format.Equals(OpenApiConstants.Json, StringComparison.OrdinalIgnoreCase))
- {
- // Buffer stream for non-JSON formats (e.g., YAML) since they require synchronous reading
- preparedStream = new MemoryStream();
- await input.CopyToAsync(preparedStream, 81920, token).ConfigureAwait(false);
- preparedStream.Position = 0;
- }
+ // Copy to a MemoryStream to enable seeking and perform format inspection
+ var bufferStream = await CopyToMemoryStreamAsync(input, token).ConfigureAwait(false);
+ return await PrepareStreamForReadingAsync(bufferStream, format, token).ConfigureAwait(false);
+ }
+ else if (!TryInspectStreamFormat(input, out format!))
+ {
+ var bufferStream = await CopyToMemoryStreamAsync(input, token).ConfigureAwait(false);
+ return await PrepareStreamForReadingAsync(bufferStream, format, token).ConfigureAwait(false);
}
return (preparedStream, format);
diff --git a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
index bc7571b4e..464e8fdf3 100644
--- a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
@@ -120,11 +120,7 @@ await File.WriteAllTextAsync(tempFilePathReferrer,
Assert.NotNull(readResult.Document.Components);
Assert.Equal(baseUri, readResult.Document.BaseUri);
}
- [Fact]
- public async Task CanLoadANonSeekableStream()
- {
- // Given
- var documentJson =
+ private readonly string documentJson =
"""
{
"openapi": "3.1.0",
@@ -135,6 +131,18 @@ public async Task CanLoadANonSeekableStream()
"paths": {}
}
""";
+ private readonly string documentYaml =
+"""
+openapi: 3.1.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths: {}
+""";
+ [Fact]
+ public async Task CanLoadANonSeekableStreamInJsonAndDetectFormat()
+ {
+ // Given
using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(documentJson));
using var nonSeekableStream = new NonSeekableStream(memoryStream);
@@ -146,6 +154,194 @@ public async Task CanLoadANonSeekableStream()
Assert.Equal("Sample API", document.Info.Title);
}
+ [Fact]
+ public async Task CanLoadANonSeekableStreamInYamlAndDetectFormat()
+ {
+ // Given
+ using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(documentYaml));
+ using var nonSeekableStream = new NonSeekableStream(memoryStream);
+ var settings = new OpenApiReaderSettings();
+ settings.AddYamlReader();
+
+ // When
+ var (document, _) = await OpenApiDocument.LoadAsync(nonSeekableStream, settings: settings);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
+ [Fact]
+ public async Task CanLoadAnAsyncOnlyStreamInJsonAndDetectFormat()
+ {
+ // Given
+ await using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(documentJson));
+ await using var nonSeekableStream = new AsyncOnlyStream(memoryStream);
+
+ // When
+ var (document, _) = await OpenApiDocument.LoadAsync(nonSeekableStream);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
+ [Fact]
+ public async Task CanLoadAnAsyncOnlyStreamInYamlAndDetectFormat()
+ {
+ // Given
+ await using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(documentYaml));
+ await using var nonSeekableStream = new AsyncOnlyStream(memoryStream);
+ var settings = new OpenApiReaderSettings();
+ settings.AddYamlReader();
+
+ // When
+ var (document, _) = await OpenApiDocument.LoadAsync(nonSeekableStream, settings: settings);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
+ public sealed class AsyncOnlyStream : Stream
+ {
+ private readonly Stream _innerStream;
+ public AsyncOnlyStream(Stream stream) : base()
+ {
+ _innerStream = stream;
+ }
+ public override bool CanSeek => _innerStream.CanSeek;
+
+ public override long Position { get => _innerStream.Position; set => throw new NotSupportedException("Blocking operations are not supported"); }
+
+ public override bool CanRead => _innerStream.CanRead;
+
+ public override bool CanWrite => _innerStream.CanWrite;
+
+ public override long Length => _innerStream.Length;
+ public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
+ {
+ return _innerStream.BeginRead(buffer, offset, count, callback, state);
+ }
+
+ public override void Flush()
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override void SetLength(long value)
+ {
+ _innerStream.SetLength(value);
+ }
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+ protected override void Dispose(bool disposing)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override async ValueTask DisposeAsync()
+ {
+ await _innerStream.DisposeAsync();
+ await base.DisposeAsync();
+ }
+
+ public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
+ {
+ return _innerStream.CopyToAsync(destination, bufferSize, cancellationToken);
+ }
+
+ public override bool CanTimeout => _innerStream.CanTimeout;
+
+ public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
+ {
+ return _innerStream.BeginWrite(buffer, offset, count, callback, state);
+ }
+
+ public override void CopyTo(Stream destination, int bufferSize)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override void Close()
+ {
+ _innerStream.Close();
+ }
+
+ public override int EndRead(IAsyncResult asyncResult)
+ {
+ return _innerStream.EndRead(asyncResult);
+ }
+
+ public override void EndWrite(IAsyncResult asyncResult)
+ {
+ _innerStream.EndWrite(asyncResult);
+ }
+
+ public override int ReadByte()
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override void WriteByte(byte value)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override Task FlushAsync(CancellationToken cancellationToken)
+ {
+ return _innerStream.FlushAsync(cancellationToken);
+ }
+
+ public override int Read(Span buffer)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
+ {
+ return _innerStream.ReadAsync(buffer, offset, count, cancellationToken);
+ }
+
+ public override ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default)
+ {
+ return _innerStream.ReadAsync(buffer, cancellationToken);
+ }
+
+ public override int ReadTimeout { get => _innerStream.ReadTimeout; set => _innerStream.ReadTimeout = value; }
+
+ public override void Write(ReadOnlySpan buffer)
+ {
+ throw new NotSupportedException("Blocking operations are not supported.");
+ }
+
+ public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
+ {
+ return _innerStream.WriteAsync(buffer, offset, count, cancellationToken);
+ }
+
+ public override ValueTask WriteAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default)
+ {
+ return _innerStream.WriteAsync(buffer, cancellationToken);
+ }
+
+ public override int WriteTimeout { get => _innerStream.WriteTimeout; set => _innerStream.WriteTimeout = value; }
+
+ }
+
public sealed class NonSeekableStream : Stream
{
private readonly Stream _innerStream;
@@ -155,7 +351,7 @@ public NonSeekableStream(Stream stream) : base()
}
public override bool CanSeek => false;
- public override long Position { get => _innerStream.Position; set => throw new InvalidOperationException("Seeking is not supported."); }
+ public override long Position { get => _innerStream.Position; set => throw new NotSupportedException("Seeking is not supported."); }
public override bool CanRead => _innerStream.CanRead;
From fff87597988af9368c70fcd56fe8f613919f3b8b Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Thu, 11 Dec 2025 14:56:48 -0500
Subject: [PATCH 004/388] chore: linting
---
src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
index 06c60889d..d6b57fbbb 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
@@ -445,17 +445,12 @@ private static async Task CopyToMemoryStreamAsync(Stream input, Ca
{
format ??= InspectStreamFormat(ms);
}
- else if (!input.CanSeek)
+ else if (!input.CanSeek || !TryInspectStreamFormat(input, out format!))
{
// Copy to a MemoryStream to enable seeking and perform format inspection
var bufferStream = await CopyToMemoryStreamAsync(input, token).ConfigureAwait(false);
return await PrepareStreamForReadingAsync(bufferStream, format, token).ConfigureAwait(false);
}
- else if (!TryInspectStreamFormat(input, out format!))
- {
- var bufferStream = await CopyToMemoryStreamAsync(input, token).ConfigureAwait(false);
- return await PrepareStreamForReadingAsync(bufferStream, format, token).ConfigureAwait(false);
- }
return (preparedStream, format);
}
From 6461bac01c4176424210e9ac249698f665a514a6 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Fri, 12 Dec 2025 09:06:30 -0500
Subject: [PATCH 005/388] fix: load JSON documents that are preceded by
multiple whitespace
Signed-off-by: Vincent Biret
---
.../Reader/OpenApiModelFactory.cs | 6 +++--
.../Reader/OpenApiModelFactoryTests.cs | 26 +++++++++++++++++++
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
index d6b57fbbb..2abd04873 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
@@ -360,7 +360,9 @@ SecurityException or
private static string InspectInputFormat(string input)
{
- return input.StartsWith("{", StringComparison.OrdinalIgnoreCase) || input.StartsWith("[", StringComparison.OrdinalIgnoreCase) ? OpenApiConstants.Json : OpenApiConstants.Yaml;
+ var trimmedInput = input.TrimStart();
+ return trimmedInput.StartsWith("{", StringComparison.OrdinalIgnoreCase) || trimmedInput.StartsWith("[", StringComparison.OrdinalIgnoreCase) ?
+ OpenApiConstants.Json : OpenApiConstants.Yaml;
}
///
@@ -393,7 +395,7 @@ private static bool TryInspectStreamFormat(Stream stream, out string? format)
var firstByte = (char)stream.ReadByte();
// Skip whitespace if present and read the next non-whitespace byte
- if (char.IsWhiteSpace(firstByte))
+ while (char.IsWhiteSpace(firstByte))
{
firstByte = (char)stream.ReadByte();
}
diff --git a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
index 2e5895c01..c3d1f87d1 100644
--- a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
@@ -203,6 +203,32 @@ public async Task CanLoadAnAsyncOnlyStreamInYamlAndDetectFormat()
Assert.Equal("Sample API", document.Info.Title);
}
+ [Fact]
+ public async Task CanLoadANonSeekableStreamInJsonAndDetectFormatWhenPrecededBySpaces()
+ {
+ // Given
+ using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(" " + documentJson));
+ using var nonSeekableStream = new NonSeekableStream(memoryStream);
+
+ // When
+ var (document, _) = await OpenApiDocument.LoadAsync(nonSeekableStream);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
+ [Fact]
+ public void CanLoadAStringJsonAndDetectFormatWhenPrecededBySpaces()
+ {
+ // When
+ var (document, _) = OpenApiDocument.Parse(" " + documentJson);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
public sealed class AsyncOnlyStream : Stream
{
private readonly Stream _innerStream;
From 640e59a143a2a6d3b79c9f6a97a6029593d7dd8f Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Fri, 12 Dec 2025 09:06:30 -0500
Subject: [PATCH 006/388] fix: load JSON documents that are preceded by
multiple whitespace
Signed-off-by: Vincent Biret
---
.../Reader/OpenApiModelFactory.cs | 6 +++--
.../Reader/OpenApiModelFactoryTests.cs | 26 +++++++++++++++++++
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
index d6b57fbbb..2abd04873 100644
--- a/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
+++ b/src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs
@@ -360,7 +360,9 @@ SecurityException or
private static string InspectInputFormat(string input)
{
- return input.StartsWith("{", StringComparison.OrdinalIgnoreCase) || input.StartsWith("[", StringComparison.OrdinalIgnoreCase) ? OpenApiConstants.Json : OpenApiConstants.Yaml;
+ var trimmedInput = input.TrimStart();
+ return trimmedInput.StartsWith("{", StringComparison.OrdinalIgnoreCase) || trimmedInput.StartsWith("[", StringComparison.OrdinalIgnoreCase) ?
+ OpenApiConstants.Json : OpenApiConstants.Yaml;
}
///
@@ -393,7 +395,7 @@ private static bool TryInspectStreamFormat(Stream stream, out string? format)
var firstByte = (char)stream.ReadByte();
// Skip whitespace if present and read the next non-whitespace byte
- if (char.IsWhiteSpace(firstByte))
+ while (char.IsWhiteSpace(firstByte))
{
firstByte = (char)stream.ReadByte();
}
diff --git a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
index 464e8fdf3..c51d3e9db 100644
--- a/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Reader/OpenApiModelFactoryTests.cs
@@ -203,6 +203,32 @@ public async Task CanLoadAnAsyncOnlyStreamInYamlAndDetectFormat()
Assert.Equal("Sample API", document.Info.Title);
}
+ [Fact]
+ public async Task CanLoadANonSeekableStreamInJsonAndDetectFormatWhenPrecededBySpaces()
+ {
+ // Given
+ using var memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(" " + documentJson));
+ using var nonSeekableStream = new NonSeekableStream(memoryStream);
+
+ // When
+ var (document, _) = await OpenApiDocument.LoadAsync(nonSeekableStream);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
+ [Fact]
+ public void CanLoadAStringJsonAndDetectFormatWhenPrecededBySpaces()
+ {
+ // When
+ var (document, _) = OpenApiDocument.Parse(" " + documentJson);
+
+ // Then
+ Assert.NotNull(document);
+ Assert.Equal("Sample API", document.Info.Title);
+ }
+
public sealed class AsyncOnlyStream : Stream
{
private readonly Stream _innerStream;
From 2c99ccfe6caae1eb6fad3d7848f9229cbc7b1481 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 12 Dec 2025 21:01:25 +0000
Subject: [PATCH 007/388] chore(deps): bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/ci-cd.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index 4d53ec759..c13b4d179 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -76,7 +76,7 @@ jobs:
working-directory: ./performance/benchmark
- name: Publish benchmark results
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
if-no-files-found: error
name: benchmark-results
From 9eeaab5b35b0d8000f28f45e47a14adaa93e95c0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 12 Dec 2025 21:01:32 +0000
Subject: [PATCH 008/388] chore(deps): bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)
---
updated-dependencies:
- dependency-name: actions/cache
dependency-version: '5'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/sonarcloud.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml
index 3f969e825..7cd77844c 100644
--- a/.github/workflows/sonarcloud.yml
+++ b/.github/workflows/sonarcloud.yml
@@ -47,7 +47,7 @@ jobs:
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Cache SonarCloud packages
- uses: actions/cache@v4
+ uses: actions/cache@v5
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
From 95baa73bfa779f6648686cc30e344eb244dfc3b2 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Mon, 15 Dec 2025 15:38:02 +0000
Subject: [PATCH 009/388] chore(support/v2): release 2.3.12
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 10 ++++++++++
Directory.Build.props | 2 +-
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index bf97149fe..de740effa 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.3.11"
+ ".": "2.3.12"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e74aada15..53c21a800 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## [2.3.12](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.11...v2.3.12) (2025-12-15)
+
+
+### Bug Fixes
+
+* load JSON documents that are preceded by multiple whitespace ([640e59a](https://github.com/microsoft/OpenAPI.NET/commit/640e59a143a2a6d3b79c9f6a97a6029593d7dd8f))
+* non-seekable json streams would fail to load as a document ([76b0159](https://github.com/microsoft/OpenAPI.NET/commit/76b0159d12790ab00310ff107e37396ecdf13336))
+* non-seekable json streams would fail to load as a document ([2436d73](https://github.com/microsoft/OpenAPI.NET/commit/2436d7382bfbf8b9ba501d88f682e952bdf27146))
+* reading streams in an asp.net context would cause async exceptions ([f9e5248](https://github.com/microsoft/OpenAPI.NET/commit/f9e524859722476b3111cb6006f77208c2d1f526))
+
## [2.3.11](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.10...v2.3.11) (2025-12-08)
diff --git a/Directory.Build.props b/Directory.Build.props
index 77209392f..26fffd5c2 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.3.11
+ 2.3.12
From 7c2568f4fa1013a84f44dbf8081874ae1efd9886 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Tue, 16 Dec 2025 17:41:14 +0000
Subject: [PATCH 010/388] chore(main): release 3.0.3
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 9 +++++++++
Directory.Build.props | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index a1304a172..9202efd86 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.0.2"
+ ".": "3.0.3"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b3bcf2306..e4da9e8f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## [3.0.3](https://github.com/microsoft/OpenAPI.NET/compare/v3.0.2...v3.0.3) (2025-12-16)
+
+
+### Bug Fixes
+
+* load JSON documents that are preceded by multiple whitespace ([6461bac](https://github.com/microsoft/OpenAPI.NET/commit/6461bac01c4176424210e9ac249698f665a514a6))
+* non-seekable json streams would fail to load as a document ([2436d73](https://github.com/microsoft/OpenAPI.NET/commit/2436d7382bfbf8b9ba501d88f682e952bdf27146))
+* reading streams in an asp.net context would cause async exceptions ([f9e5248](https://github.com/microsoft/OpenAPI.NET/commit/f9e524859722476b3111cb6006f77208c2d1f526))
+
## [3.0.2](https://github.com/microsoft/OpenAPI.NET/compare/v3.0.1...v3.0.2) (2025-12-08)
### Bug Fixes
diff --git a/Directory.Build.props b/Directory.Build.props
index 8582f5826..e5fa07a18 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.0.2
+ 3.0.3
From 782cf8d1ff8166e3c7be706e08dabf168b9616a4 Mon Sep 17 00:00:00 2001
From: Sjoerd van der Meer
Date: Wed, 17 Dec 2025 21:58:43 +0100
Subject: [PATCH 011/388] Merge pull request #2645 from
desjoerd/fix/support-v2/gh-2629
feat: Add `type: "null"` downcasting when in oneOf and anyOf for OpenAPI v3
---
src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 78 ++++-
.../Models/OpenApiSchemaTests.cs | 313 ++++++++++++++++++
2 files changed, 379 insertions(+), 12 deletions(-)
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
index f31644c1f..1ffccd272 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
@@ -438,23 +438,39 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
// enum
var enumValue = Enum is not { Count: > 0 }
- && !string.IsNullOrEmpty(Const)
+ && !string.IsNullOrEmpty(Const)
&& version < OpenApiSpecVersion.OpenApi3_1
? new List { JsonValue.Create(Const)! }
: Enum;
writer.WriteOptionalCollection(OpenApiConstants.Enum, enumValue, (nodeWriter, s) => nodeWriter.WriteAny(s));
+ // Handle oneOf/anyOf with null type for v3.0 downcast
+ IList? effectiveOneOf = OneOf;
+ IList? effectiveAnyOf = AnyOf;
+ bool hasNullInComposition = false;
+ JsonSchemaType? inferredType = null;
+
+ if (version == OpenApiSpecVersion.OpenApi3_0)
+ {
+ (effectiveOneOf, var inferredOneOf, var nullInOneOf) = ProcessCompositionForNull(OneOf);
+ hasNullInComposition |= nullInOneOf;
+ inferredType = inferredOneOf ?? inferredType;
+ (effectiveAnyOf, var inferredAnyOf, var nullInAnyOf) = ProcessCompositionForNull(AnyOf);
+ hasNullInComposition |= nullInAnyOf;
+ inferredType = inferredAnyOf ?? inferredType;
+ }
+
// type
- SerializeTypeProperty(writer, version);
+ SerializeTypeProperty(writer, version, inferredType);
// allOf
writer.WriteOptionalCollection(OpenApiConstants.AllOf, AllOf, callback);
// anyOf
- writer.WriteOptionalCollection(OpenApiConstants.AnyOf, AnyOf, callback);
+ writer.WriteOptionalCollection(OpenApiConstants.AnyOf, effectiveAnyOf, callback);
// oneOf
- writer.WriteOptionalCollection(OpenApiConstants.OneOf, OneOf, callback);
+ writer.WriteOptionalCollection(OpenApiConstants.OneOf, effectiveOneOf, callback);
// not
writer.WriteOptionalObject(OpenApiConstants.Not, Not, callback);
@@ -493,7 +509,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
// nullable
if (version == OpenApiSpecVersion.OpenApi3_0)
{
- SerializeNullable(writer, version);
+ SerializeNullable(writer, version, hasNullInComposition);
}
// discriminator
@@ -766,14 +782,17 @@ private void SerializeAsV2(
writer.WriteEndObject();
}
- private void SerializeTypeProperty(IOpenApiWriter writer, OpenApiSpecVersion version)
+ private void SerializeTypeProperty(IOpenApiWriter writer, OpenApiSpecVersion version, JsonSchemaType? inferredType = null)
{
- if (Type is null)
+ // Use original type or inferred type when the explicit type is not set
+ var typeToUse = Type ?? inferredType;
+
+ if (typeToUse is null)
{
return;
}
- var unifiedType = IsNullable ? Type.Value | JsonSchemaType.Null : Type.Value;
+ var unifiedType = IsNullable ? typeToUse.Value | JsonSchemaType.Null : typeToUse.Value;
var typeWithoutNull = unifiedType & ~JsonSchemaType.Null;
switch (version)
@@ -804,8 +823,8 @@ private static bool HasMultipleTypes(JsonSchemaType schemaType)
private static void WriteUnifiedSchemaType(JsonSchemaType type, IOpenApiWriter writer)
{
var array = (from JsonSchemaType flag in jsonSchemaTypeValues
- where type.HasFlag(flag)
- select flag.ToFirstIdentifier()).ToArray();
+ where type.HasFlag(flag)
+ select flag.ToFirstIdentifier()).ToArray();
if (array.Length > 1)
{
writer.WriteOptionalCollection(OpenApiConstants.Type, array, (w, s) =>
@@ -822,9 +841,9 @@ where type.HasFlag(flag)
}
}
- private void SerializeNullable(IOpenApiWriter writer, OpenApiSpecVersion version)
+ private void SerializeNullable(IOpenApiWriter writer, OpenApiSpecVersion version, bool hasNullInComposition = false)
{
- if (IsNullable)
+ if (IsNullable || hasNullInComposition)
{
switch (version)
{
@@ -838,6 +857,41 @@ private void SerializeNullable(IOpenApiWriter writer, OpenApiSpecVersion version
}
}
+ ///
+ /// Processes a composition (oneOf or anyOf) for null types, filtering out null schemas and inferring common type.
+ ///
+ /// The list of schemas in the composition.
+ /// A tuple with the effective list, inferred type, and whether null is present in composition.
+ private static (IList? effective, JsonSchemaType? inferredType, bool hasNullInComposition)
+ ProcessCompositionForNull(IList? composition)
+ {
+ if (composition is null || !composition.Any(static s => s.Type is JsonSchemaType.Null))
+ {
+ // Nothing to patch
+ return (composition, null, false);
+ }
+
+ var nonNullSchemas = composition
+ .Where(static s => s.Type is null or not JsonSchemaType.Null)
+ .ToList();
+
+ if (nonNullSchemas.Count > 0)
+ {
+ JsonSchemaType commonType = 0;
+
+ foreach (var schema in nonNullSchemas)
+ {
+ commonType |= schema.Type.GetValueOrDefault() & ~JsonSchemaType.Null;
+ }
+
+ return (nonNullSchemas, commonType, true);
+ }
+ else
+ {
+ return (null, null, true);
+ }
+ }
+
#if NET5_0_OR_GREATER
private static readonly Array jsonSchemaTypeValues = System.Enum.GetValues();
#else
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs
index 6ffbb9fe4..c20da3127 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs
@@ -790,6 +790,319 @@ public async Task SerializeAdditionalPropertiesAsV3PlusEmits(OpenApiSpecVersion
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expected), JsonNode.Parse(actual)));
}
+ [Fact]
+ public async Task SerializeOneOfWithNullAsV3ShouldUseNullableAsync()
+ {
+ // Arrange - oneOf with null and a reference-like schema
+ var schema = new OpenApiSchema
+ {
+ OneOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null },
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.String,
+ MaxLength = 10
+ }
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV3(writer);
+ await writer.FlushAsync();
+
+ var v3Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV3Schema =
+ """
+ {
+ "type": "string",
+ "oneOf": [
+ {
+ "maxLength": 10,
+ "type": "string"
+ }
+ ],
+ "nullable": true
+ }
+ """;
+
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
+ }
+
+ [Fact]
+ public async Task SerializeOneOfWithNullAndMultipleSchemasAsV3ShouldMarkItAsNullableWithoutType()
+ {
+ // Arrange - oneOf with null, string, and number
+ var schema = new OpenApiSchema
+ {
+ OneOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null },
+ new OpenApiSchema { Type = JsonSchemaType.String },
+ new OpenApiSchema { Type = JsonSchemaType.Number },
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV3(writer);
+ await writer.FlushAsync();
+
+ var v3Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV3Schema =
+ """
+ {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ }
+ ],
+ "nullable": true
+ }
+ """;
+
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
+ }
+
+ [Fact]
+ public async Task SerializeAnyOfWithNullAsV3ShouldUseNullableAsync()
+ {
+ // Arrange - anyOf with null and object schema
+ var schema = new OpenApiSchema
+ {
+ AnyOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null },
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Object,
+ Properties = new Dictionary
+ {
+ ["id"] = new OpenApiSchema { Type = JsonSchemaType.Integer }
+ }
+ }
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV3(writer);
+ await writer.FlushAsync();
+
+ var v3Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV3Schema =
+ """
+ {
+ "type": "object",
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ }
+ }
+ }
+ ],
+ "nullable": true
+ }
+ """;
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
+ }
+
+ [Fact]
+ public async Task SerializeAnyOfWithNullAndMultipleSchemasAsV3ShouldApplyNullable()
+ {
+ // Arrange - anyOf with null and multiple schemas
+ var schema = new OpenApiSchema
+ {
+ AnyOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null },
+ new OpenApiSchema { Type = JsonSchemaType.String, MinLength = 1 },
+ new OpenApiSchema { Type = JsonSchemaType.Integer }
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV3(writer);
+ await writer.FlushAsync();
+
+ var v3Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV3Schema =
+ """
+ {
+ "anyOf": [
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ],
+ "nullable": true
+ }
+ """;
+
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
+ }
+
+ [Fact]
+ public async Task SerializeOneOfWithOnlyNullAsV3ShouldJustBeNullableAsync()
+ {
+ // Arrange - oneOf with only null
+ var schema = new OpenApiSchema
+ {
+ OneOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null }
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV3(writer);
+ await writer.FlushAsync();
+
+ var v3Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV3Schema =
+ """
+ {
+ "nullable": true
+ }
+ """;
+
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
+ }
+
+ [Fact]
+ public async Task SerializeOneOfWithNullAsV31ShouldNotChangeAsync()
+ {
+ // Arrange - oneOf with null should remain unchanged in v3.1
+ var schema = new OpenApiSchema
+ {
+ OneOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null },
+ new OpenApiSchema { Type = JsonSchemaType.String }
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV31(writer);
+ await writer.FlushAsync();
+
+ var v31Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV31Schema =
+ """
+ {
+ "oneOf": [
+ {
+ "type": "null"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ }
+ """;
+
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV31Schema), JsonNode.Parse(v31Schema)));
+ }
+
+ [Fact]
+ public async Task SerializeOneOfWithNullAndRefAsV3ShouldUseNullableAsync()
+ {
+ // Arrange - oneOf with null and a $ref to a schema component
+ var document = new OpenApiDocument
+ {
+ Components = new OpenApiComponents
+ {
+ Schemas = new Dictionary
+ {
+ ["Pet"] = new OpenApiSchema
+ {
+ Type = JsonSchemaType.Object,
+ Properties = new Dictionary
+ {
+ ["id"] = new OpenApiSchema { Type = JsonSchemaType.Integer },
+ ["name"] = new OpenApiSchema { Type = JsonSchemaType.String }
+ }
+ }
+ }
+ }
+ };
+
+ // Register components so references can be resolved
+ document.Workspace.RegisterComponents(document);
+
+ var schemaRef = new OpenApiSchemaReference("Pet", document);
+
+ var schema = new OpenApiSchema
+ {
+ OneOf = new List
+ {
+ new OpenApiSchema { Type = JsonSchemaType.Null },
+ schemaRef
+ }
+ };
+
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new() { Terse = false });
+
+ // Act
+ schema.SerializeAsV3(writer);
+ await writer.FlushAsync();
+
+ var v3Schema = outputStringWriter.GetStringBuilder().ToString();
+
+ var expectedV3Schema =
+ """
+ {
+ "type": "object",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/Pet"
+ }
+ ],
+ "nullable": true
+ }
+ """;
+
+ // Assert
+ Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expectedV3Schema), JsonNode.Parse(v3Schema)));
+ }
internal class SchemaVisitor : OpenApiVisitorBase
{
From 6c08b16a95042b9f003d789c485db059019daaac Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Wed, 17 Dec 2025 20:59:07 +0000
Subject: [PATCH 012/388] chore(support/v2): release 2.4.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 7 +++++++
Directory.Build.props | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index de740effa..b44b28703 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.3.12"
+ ".": "2.4.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 53c21a800..a60c484e2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [2.4.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.12...v2.4.0) (2025-12-17)
+
+
+### Features
+
+* Add `type: "null"` downcasting when in oneOf and anyOf for OpenAPI v3 ([782cf8d](https://github.com/microsoft/OpenAPI.NET/commit/782cf8d1ff8166e3c7be706e08dabf168b9616a4))
+
## [2.3.12](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.11...v2.3.12) (2025-12-15)
diff --git a/Directory.Build.props b/Directory.Build.props
index 26fffd5c2..caf63957a 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.3.12
+ 2.4.0
From 79f60f72d9427ff824114c4b0c610d12732df9a5 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Wed, 17 Dec 2025 21:34:20 +0000
Subject: [PATCH 013/388] chore(main): release 3.1.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 7 +++++++
Directory.Build.props | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 9202efd86..e0dc5001b 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.0.3"
+ ".": "3.1.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a1497c2f6..fe45c813e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [3.1.0](https://github.com/microsoft/OpenAPI.NET/compare/v3.0.3...v3.1.0) (2025-12-17)
+
+
+### Features
+
+* Add `type: "null"` downcasting when in oneOf and anyOf for OpenAPI v3 ([782cf8d](https://github.com/microsoft/OpenAPI.NET/commit/782cf8d1ff8166e3c7be706e08dabf168b9616a4))
+
## [3.0.3](https://github.com/microsoft/OpenAPI.NET/compare/v3.0.2...v3.0.3) (2025-12-16)
### Bug Fixes
diff --git a/Directory.Build.props b/Directory.Build.props
index e5fa07a18..11a996a34 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.0.3
+ 3.1.0
From e36fc9565bce42916eb7bf64d1f74d491dd1f407 Mon Sep 17 00:00:00 2001
From: Niels van Dijk
Date: Thu, 18 Dec 2025 10:04:33 +0100
Subject: [PATCH 014/388] fix(schema): always serialize `additionalProperties:
false`
* Updates serialization logic to emit `additionalProperties: false` for all OpenAPI versions when `AdditionalPropertiesAllowed` is false.
* Refactors related test to a theory and verifies behavior for both OpenAPI 3.0 and 3.1.
* Ensures consistent schema output across OpenAPI versions.
---
src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 5 ++---
test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs | 8 +++++---
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
index 1ffccd272..e0b4ae495 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
@@ -489,9 +489,8 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
AdditionalProperties,
callback);
}
- // true is the default in earlier versions 3, no need to write it out
- // boolean value is only supported for version 3 and earlier (version 2 is implemented in the other serialize method, the condition is a failsafe)
- else if (!AdditionalPropertiesAllowed && version <= OpenApiSpecVersion.OpenApi3_0)
+ // true is the default, no need to write it out
+ else if (!AdditionalPropertiesAllowed)
{
writer.WriteProperty(OpenApiConstants.AdditionalProperties, AdditionalPropertiesAllowed);
}
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs
index c20da3127..67a79e35e 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs
@@ -754,8 +754,10 @@ public async Task SerializeAdditionalPropertiesAllowedAsV3PlusDefaultDoesNotEmit
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expected), JsonNode.Parse(actual)));
}
- [Fact]
- public async Task SerializeAdditionalPropertiesAllowedAsV3FalseEmits()
+ [Theory]
+ [InlineData(OpenApiSpecVersion.OpenApi3_0)]
+ [InlineData(OpenApiSpecVersion.OpenApi3_1)]
+ public async Task SerializeAdditionalPropertiesAllowedAsV3PlusFalseEmits(OpenApiSpecVersion version)
{
var expected = @"{ ""additionalProperties"": false }";
// Given
@@ -765,7 +767,7 @@ public async Task SerializeAdditionalPropertiesAllowedAsV3FalseEmits()
};
// When
- var actual = await schema.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_0);
+ var actual = await schema.SerializeAsJsonAsync(version);
// Then
Assert.True(JsonNode.DeepEquals(JsonNode.Parse(expected), JsonNode.Parse(actual)));
From a7ae46e7e9432986d656bcb747071787a0e87c47 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Thu, 18 Dec 2025 11:35:21 +0000
Subject: [PATCH 015/388] chore(support/v2): release 2.4.1
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
Directory.Build.props | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index b44b28703..adf5fd769 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.4.0"
+ ".": "2.4.1"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a60c484e2..7414944db 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [2.4.1](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.0...v2.4.1) (2025-12-18)
+
+
+### Bug Fixes
+
+* **schema:** always serialize `additionalProperties: false` ([6651c36](https://github.com/microsoft/OpenAPI.NET/commit/6651c36ff341329c053776d65b36b1b7fa9dd3ea))
+* **schema:** always serialize `additionalProperties: false` ([e36fc95](https://github.com/microsoft/OpenAPI.NET/commit/e36fc9565bce42916eb7bf64d1f74d491dd1f407))
+
## [2.4.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.3.12...v2.4.0) (2025-12-17)
diff --git a/Directory.Build.props b/Directory.Build.props
index caf63957a..2d0fc7255 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.4.0
+ 2.4.1
From f71787dd16a40d079aa5013ac5c937c81f92b563 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Thu, 18 Dec 2025 16:12:12 +0000
Subject: [PATCH 016/388] chore(main): release 3.1.1
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
Directory.Build.props | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index e0dc5001b..89c23baca 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.1.0"
+ ".": "3.1.1"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b3e5aa34a..be4068a9a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [3.1.1](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.0...v3.1.1) (2025-12-18)
+
+
+### Bug Fixes
+
+* **schema:** always serialize `additionalProperties: false` ([6651c36](https://github.com/microsoft/OpenAPI.NET/commit/6651c36ff341329c053776d65b36b1b7fa9dd3ea))
+* **schema:** always serialize `additionalProperties: false` ([e36fc95](https://github.com/microsoft/OpenAPI.NET/commit/e36fc9565bce42916eb7bf64d1f74d491dd1f407))
+
## [3.1.0](https://github.com/microsoft/OpenAPI.NET/compare/v3.0.3...v3.1.0) (2025-12-17)
### Features
diff --git a/Directory.Build.props b/Directory.Build.props
index 11a996a34..5aba3b052 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.1.0
+ 3.1.1
From 82177a457784e9ed9fbd35f34b4d1b013997d269 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Fri, 19 Dec 2025 14:29:19 -0500
Subject: [PATCH 017/388] docs: adds instructions to update public reference
docs after nuget release
Signed-off-by: Vincent Biret
---
.azure-pipelines/ci-build.yml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/.azure-pipelines/ci-build.yml b/.azure-pipelines/ci-build.yml
index 8921e7112..53b181b22 100644
--- a/.azure-pipelines/ci-build.yml
+++ b/.azure-pipelines/ci-build.yml
@@ -472,4 +472,8 @@ extends:
-t "$(REGISTRY)/$(IMAGE_NAME):${VERSION}" \
"$(Pipeline.Workspace)"
displayName: 'Build and Push Release Image'
- condition: contains(variables['Build.SourceBranch'], 'refs/tags/v')
\ No newline at end of file
+ condition: contains(variables['Build.SourceBranch'], 'refs/tags/v')
+
+# once the nuget has been released, fill this form to get the public documentation updated.
+# https://dev.azure.com/msft-skilling/Content/_workitems/create/User%20Story?templateId=39fb91e3-64a2-4c8a-83db-b2bdf3603dd3&ownerId=c4a28f90-17ae-4384-b514-7273392b082b
+# https://learn.microsoft.com/en-us/dotnet/api/microsoft.openapi
From 931a3929fc14dc15f862b98bc03e52236a1a8e03 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 22 Dec 2025 13:21:08 -0500
Subject: [PATCH 018/388] chore: adds 3.2 version to the workbench chore: sets
3.2 as default version for the workbench
Signed-off-by: Vincent Biret
---
src/Microsoft.OpenApi.Workbench/MainModel.cs | 2 +-
src/Microsoft.OpenApi.Workbench/MainWindow.xaml | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/Microsoft.OpenApi.Workbench/MainModel.cs b/src/Microsoft.OpenApi.Workbench/MainModel.cs
index 660fcc5ed..08bfbd001 100644
--- a/src/Microsoft.OpenApi.Workbench/MainModel.cs
+++ b/src/Microsoft.OpenApi.Workbench/MainModel.cs
@@ -42,7 +42,7 @@ public class MainModel : INotifyPropertyChanged
///
/// Default version.
///
- private OpenApiSpecVersion _version = OpenApiSpecVersion.OpenApi3_0;
+ private OpenApiSpecVersion _version = OpenApiSpecVersion.OpenApi3_2;
private static readonly HttpClient _httpClient = new();
diff --git a/src/Microsoft.OpenApi.Workbench/MainWindow.xaml b/src/Microsoft.OpenApi.Workbench/MainWindow.xaml
index 32c14659d..87e219796 100644
--- a/src/Microsoft.OpenApi.Workbench/MainWindow.xaml
+++ b/src/Microsoft.OpenApi.Workbench/MainWindow.xaml
@@ -40,8 +40,9 @@
-
-
+
+
+
From 2495dea83fef872752120edeb842be492a0723d4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 22 Dec 2025 18:53:09 +0000
Subject: [PATCH 019/388] Initial plan
From 50b44aad12d8fa86a46f7f6d62896a7b1c344d2e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 22 Dec 2025 19:07:23 +0000
Subject: [PATCH 020/388] fix: wrap extension parser calls in try-catch to
ensure correct error pointers
When extension parsers throw OpenApiException, the exceptions are now caught in LoadExtension methods across all OpenAPI versions (V2, V3, V3.1, V3.2). This ensures the error pointer correctly includes all path segments (e.g., #/definitions/demo/x-tag instead of #/definitions/x-tag).
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
---
.../Reader/V2/OpenApiV2Deserializer.cs | 11 +-
.../Reader/V3/OpenApiV3Deserializer.cs | 23 ++--
.../Reader/V31/OpenApiV31Deserializer.cs | 17 ++-
.../Reader/V32/OpenApiV32Deserializer.cs | 17 ++-
.../TestCustomExtension.cs | 102 ++++++++++++++++++
5 files changed, 156 insertions(+), 14 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
index c640b310c..2b075c1bc 100644
--- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
@@ -79,7 +79,16 @@ private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
{
- return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0);
+ try
+ {
+ return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0);
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ return new JsonNodeExtension(node.CreateAny());
+ }
}
else
{
diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs
index 0b74cedc5..1a03268d6 100644
--- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs
@@ -130,15 +130,24 @@ public static JsonNodeExtension LoadAny(ParseNode node, OpenApiDocument hostDocu
private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
- if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) && parser(
- node.CreateAny(), OpenApiSpecVersion.OpenApi3_0) is { } result)
+ if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
{
- return result;
- }
- else
- {
- return new JsonNodeExtension(node.CreateAny());
+ try
+ {
+ var result = parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_0);
+ if (result is { })
+ {
+ return result;
+ }
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ }
}
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs
index 08f2ec048..3608ad5f7 100644
--- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs
@@ -131,9 +131,20 @@ public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument)
private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
- return node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)
- ? parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1)
- : new JsonNodeExtension(node.CreateAny());
+ if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
+ {
+ try
+ {
+ return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1);
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ }
+ }
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
diff --git a/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs b/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs
index 9b062931d..55f45b38e 100644
--- a/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs
@@ -131,9 +131,20 @@ public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument)
private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
- return node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)
- ? parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_2)
- : new JsonNodeExtension(node.CreateAny());
+ if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
+ {
+ try
+ {
+ return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_2);
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ }
+ }
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
index 57f55e95e..1964ea61b 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
@@ -44,6 +44,108 @@ public void ParseCustomExtension()
Assert.Equal("hey", fooExtension.Bar);
Assert.Equal("hi!", fooExtension.Baz);
}
+
+ [Fact]
+ public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer()
+ {
+ var json = @"{
+ ""swagger"": ""2.0"",
+ ""info"": {
+ ""title"": ""Demo"",
+ ""version"": ""1""
+ },
+ ""paths"": {},
+ ""definitions"": {
+ ""demo"": {
+ ""x-tag"": null
+ }
+ }
+}";
+ var settings = new OpenApiReaderSettings
+ {
+ ExtensionParsers =
+ {
+ { "x-tag", (any, version) => throw new OpenApiException("Testing") }
+ }
+ };
+
+ var result = OpenApiDocument.Parse(json, "json", settings);
+
+ Assert.NotNull(result.Diagnostic);
+ Assert.NotEmpty(result.Diagnostic.Errors);
+ var error = result.Diagnostic.Errors[0];
+ Assert.Equal("Testing", error.Message);
+ Assert.Equal("#/definitions/demo/x-tag", error.Pointer);
+ }
+
+ [Fact]
+ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer()
+ {
+ var json = @"{
+ ""openapi"": ""3.0.0"",
+ ""info"": {
+ ""title"": ""Demo"",
+ ""version"": ""1""
+ },
+ ""paths"": {},
+ ""components"": {
+ ""schemas"": {
+ ""demo"": {
+ ""x-tag"": null
+ }
+ }
+ }
+}";
+ var settings = new OpenApiReaderSettings
+ {
+ ExtensionParsers =
+ {
+ { "x-tag", (any, version) => throw new OpenApiException("Testing") }
+ }
+ };
+
+ var result = OpenApiDocument.Parse(json, "json", settings);
+
+ Assert.NotNull(result.Diagnostic);
+ Assert.NotEmpty(result.Diagnostic.Errors);
+ var error = result.Diagnostic.Errors[0];
+ Assert.Equal("Testing", error.Message);
+ Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer);
+ }
+
+ [Fact]
+ public void ExtensionParserThrowingOpenApiException_V31_ShouldHaveCorrectPointer()
+ {
+ var json = @"{
+ ""openapi"": ""3.1.0"",
+ ""info"": {
+ ""title"": ""Demo"",
+ ""version"": ""1""
+ },
+ ""components"": {
+ ""schemas"": {
+ ""demo"": {
+ ""x-tag"": null
+ }
+ }
+ }
+}";
+ var settings = new OpenApiReaderSettings
+ {
+ ExtensionParsers =
+ {
+ { "x-tag", (any, version) => throw new OpenApiException("Testing") }
+ }
+ };
+
+ var result = OpenApiDocument.Parse(json, "json", settings);
+
+ Assert.NotNull(result.Diagnostic);
+ Assert.NotEmpty(result.Diagnostic.Errors);
+ var error = result.Diagnostic.Errors[0];
+ Assert.Equal("Testing", error.Message);
+ Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer);
+ }
}
internal class FooExtension : IOpenApiExtension, IOpenApiElement
From 12f649959fe73d76c36a51f0126b41f14f4823fd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 22 Dec 2025 19:10:01 +0000
Subject: [PATCH 021/388] refactor: make V2 LoadExtension consistent with other
versions
Moved the return statement for JsonNodeExtension outside the catch block to match the pattern used in V3, V31, and V32 deserializers.
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
---
src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
index 2b075c1bc..80d079b5e 100644
--- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
@@ -87,13 +87,10 @@ private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
ex.Pointer = node.Context.GetLocation();
node.Context.Diagnostic.Errors.Add(new(ex));
- return new JsonNodeExtension(node.CreateAny());
}
}
- else
- {
- return new JsonNodeExtension(node.CreateAny());
- }
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
From e85698a4172a874c33eba6c902d60f975e51e887 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 22 Dec 2025 19:20:54 +0000
Subject: [PATCH 022/388] style: use raw string literals for JSON test data
Changed from verbatim string literals (@"...") to raw string literals ("""...""") for consistency with existing test code.
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
---
.../TestCustomExtension.cs | 68 ++++++++++---------
1 file changed, 37 insertions(+), 31 deletions(-)
diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
index 1964ea61b..b12a56d31 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
@@ -48,19 +48,21 @@ public void ParseCustomExtension()
[Fact]
public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer()
{
- var json = @"{
- ""swagger"": ""2.0"",
- ""info"": {
- ""title"": ""Demo"",
- ""version"": ""1""
+ var json = """
+{
+ "swagger": "2.0",
+ "info": {
+ "title": "Demo",
+ "version": "1"
},
- ""paths"": {},
- ""definitions"": {
- ""demo"": {
- ""x-tag"": null
+ "paths": {},
+ "definitions": {
+ "demo": {
+ "x-tag": null
}
}
-}";
+}
+""";
var settings = new OpenApiReaderSettings
{
ExtensionParsers =
@@ -81,21 +83,23 @@ public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer(
[Fact]
public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer()
{
- var json = @"{
- ""openapi"": ""3.0.0"",
- ""info"": {
- ""title"": ""Demo"",
- ""version"": ""1""
+ var json = """
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "Demo",
+ "version": "1"
},
- ""paths"": {},
- ""components"": {
- ""schemas"": {
- ""demo"": {
- ""x-tag"": null
+ "paths": {},
+ "components": {
+ "schemas": {
+ "demo": {
+ "x-tag": null
}
}
}
-}";
+}
+""";
var settings = new OpenApiReaderSettings
{
ExtensionParsers =
@@ -116,20 +120,22 @@ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer(
[Fact]
public void ExtensionParserThrowingOpenApiException_V31_ShouldHaveCorrectPointer()
{
- var json = @"{
- ""openapi"": ""3.1.0"",
- ""info"": {
- ""title"": ""Demo"",
- ""version"": ""1""
+ var json = """
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "Demo",
+ "version": "1"
},
- ""components"": {
- ""schemas"": {
- ""demo"": {
- ""x-tag"": null
+ "components": {
+ "schemas": {
+ "demo": {
+ "x-tag": null
}
}
}
-}";
+}
+""";
var settings = new OpenApiReaderSettings
{
ExtensionParsers =
From 8021a752fb5516ccf749bd3628f860bf3f0848c0 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 22 Dec 2025 14:42:22 -0500
Subject: [PATCH 023/388] chore: refactors test definition for better coverage
Signed-off-by: Vincent Biret
---
.../TestCustomExtension.cs | 47 +++----------------
1 file changed, 7 insertions(+), 40 deletions(-)
diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
index b12a56d31..9f4404c05 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
@@ -80,12 +80,15 @@ public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer(
Assert.Equal("#/definitions/demo/x-tag", error.Pointer);
}
- [Fact]
- public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer()
+ [Theory]
+ [InlineData("3.0.4")]
+ [InlineData("3.1.1")]
+ [InlineData("3.2.0")]
+ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer(string version)
{
- var json = """
+ var json = $$"""
{
- "openapi": "3.0.0",
+ "openapi": "{{version}}",
"info": {
"title": "Demo",
"version": "1"
@@ -116,42 +119,6 @@ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer(
Assert.Equal("Testing", error.Message);
Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer);
}
-
- [Fact]
- public void ExtensionParserThrowingOpenApiException_V31_ShouldHaveCorrectPointer()
- {
- var json = """
-{
- "openapi": "3.1.0",
- "info": {
- "title": "Demo",
- "version": "1"
- },
- "components": {
- "schemas": {
- "demo": {
- "x-tag": null
- }
- }
- }
-}
-""";
- var settings = new OpenApiReaderSettings
- {
- ExtensionParsers =
- {
- { "x-tag", (any, version) => throw new OpenApiException("Testing") }
- }
- };
-
- var result = OpenApiDocument.Parse(json, "json", settings);
-
- Assert.NotNull(result.Diagnostic);
- Assert.NotEmpty(result.Diagnostic.Errors);
- var error = result.Diagnostic.Errors[0];
- Assert.Equal("Testing", error.Message);
- Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer);
- }
}
internal class FooExtension : IOpenApiExtension, IOpenApiElement
From 458cabe6cd0fbdb192dbd17f2d6ab3b8162d1166 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 22 Dec 2025 19:07:23 +0000
Subject: [PATCH 024/388] fix: wrap extension parser calls in try-catch to
ensure correct error pointers
When extension parsers throw OpenApiException, the exceptions are now caught in LoadExtension methods across all OpenAPI versions (V2, V3, V3.1, V3.2). This ensures the error pointer correctly includes all path segments (e.g., #/definitions/demo/x-tag instead of #/definitions/x-tag).
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
refactor: make V2 LoadExtension consistent with other versions
Moved the return statement for JsonNodeExtension outside the catch block to match the pattern used in V3, V31, and V32 deserializers.
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
style: use raw string literals for JSON test data
Changed from verbatim string literals (@"...") to raw string literals ("""...""") for consistency with existing test code.
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
chore: refactors test definition for better coverage
Signed-off-by: Vincent Biret
chore: removes extraneous version
---
.../Reader/V2/OpenApiV2Deserializer.cs | 16 ++--
.../Reader/V3/OpenApiV3Deserializer.cs | 23 ++++--
.../Reader/V31/OpenApiV31Deserializer.cs | 17 ++++-
.../TestCustomExtension.cs | 74 +++++++++++++++++++
4 files changed, 115 insertions(+), 15 deletions(-)
diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
index c640b310c..80d079b5e 100644
--- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs
@@ -79,12 +79,18 @@ private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
{
- return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0);
- }
- else
- {
- return new JsonNodeExtension(node.CreateAny());
+ try
+ {
+ return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0);
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ }
}
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs
index 0b74cedc5..1a03268d6 100644
--- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs
@@ -130,15 +130,24 @@ public static JsonNodeExtension LoadAny(ParseNode node, OpenApiDocument hostDocu
private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
- if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) && parser(
- node.CreateAny(), OpenApiSpecVersion.OpenApi3_0) is { } result)
+ if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
{
- return result;
- }
- else
- {
- return new JsonNodeExtension(node.CreateAny());
+ try
+ {
+ var result = parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_0);
+ if (result is { })
+ {
+ return result;
+ }
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ }
}
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs
index 08f2ec048..3608ad5f7 100644
--- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs
@@ -131,9 +131,20 @@ public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument)
private static IOpenApiExtension LoadExtension(string name, ParseNode node)
{
- return node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)
- ? parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1)
- : new JsonNodeExtension(node.CreateAny());
+ if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser))
+ {
+ try
+ {
+ return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1);
+ }
+ catch (OpenApiException ex)
+ {
+ ex.Pointer = node.Context.GetLocation();
+ node.Context.Diagnostic.Errors.Add(new(ex));
+ }
+ }
+
+ return new JsonNodeExtension(node.CreateAny());
}
private static string? LoadString(ParseNode node)
diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
index 57f55e95e..96de89cf9 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs
@@ -44,6 +44,80 @@ public void ParseCustomExtension()
Assert.Equal("hey", fooExtension.Bar);
Assert.Equal("hi!", fooExtension.Baz);
}
+
+ [Fact]
+ public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer()
+ {
+ var json = """
+{
+ "swagger": "2.0",
+ "info": {
+ "title": "Demo",
+ "version": "1"
+ },
+ "paths": {},
+ "definitions": {
+ "demo": {
+ "x-tag": null
+ }
+ }
+}
+""";
+ var settings = new OpenApiReaderSettings
+ {
+ ExtensionParsers =
+ {
+ { "x-tag", (any, version) => throw new OpenApiException("Testing") }
+ }
+ };
+
+ var result = OpenApiDocument.Parse(json, "json", settings);
+
+ Assert.NotNull(result.Diagnostic);
+ Assert.NotEmpty(result.Diagnostic.Errors);
+ var error = result.Diagnostic.Errors[0];
+ Assert.Equal("Testing", error.Message);
+ Assert.Equal("#/definitions/demo/x-tag", error.Pointer);
+ }
+
+ [Theory]
+ [InlineData("3.0.4")]
+ [InlineData("3.1.1")]
+ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer(string version)
+ {
+ var json = $$"""
+{
+ "openapi": "{{version}}",
+ "info": {
+ "title": "Demo",
+ "version": "1"
+ },
+ "paths": {},
+ "components": {
+ "schemas": {
+ "demo": {
+ "x-tag": null
+ }
+ }
+ }
+}
+""";
+ var settings = new OpenApiReaderSettings
+ {
+ ExtensionParsers =
+ {
+ { "x-tag", (any, version) => throw new OpenApiException("Testing") }
+ }
+ };
+
+ var result = OpenApiDocument.Parse(json, "json", settings);
+
+ Assert.NotNull(result.Diagnostic);
+ Assert.NotEmpty(result.Diagnostic.Errors);
+ var error = result.Diagnostic.Errors[0];
+ Assert.Equal("Testing", error.Message);
+ Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer);
+ }
}
internal class FooExtension : IOpenApiExtension, IOpenApiElement
From aeffc9832f2aac1f1e65c0b6ae0a73fb10560900 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Mon, 22 Dec 2025 20:20:29 +0000
Subject: [PATCH 025/388] chore(support/v2): release 2.4.2
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
Directory.Build.props | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index adf5fd769..bd1ba1cb3 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.4.1"
+ ".": "2.4.2"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7414944db..b7d9b73f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [2.4.2](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.1...v2.4.2) (2025-12-22)
+
+
+### Bug Fixes
+
+* wrap extension parser calls in try-catch to ensure correct error pointers ([63cf4a3](https://github.com/microsoft/OpenAPI.NET/commit/63cf4a3029fe2d285a6fe2724e30ffcf3bdd2f9f))
+* wrap extension parser calls in try-catch to ensure correct error pointers ([458cabe](https://github.com/microsoft/OpenAPI.NET/commit/458cabe6cd0fbdb192dbd17f2d6ab3b8162d1166))
+
## [2.4.1](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.0...v2.4.1) (2025-12-18)
diff --git a/Directory.Build.props b/Directory.Build.props
index 2d0fc7255..a64e378aa 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.4.1
+ 2.4.2
From d0cae6626ae17cd64db584885de12cec6c80ce1f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 5 Jan 2026 21:01:46 +0000
Subject: [PATCH 026/388] chore(deps): bump dependabot/fetch-metadata from
2.4.0 to 2.5.0
Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.4.0 to 2.5.0.
- [Release notes](https://github.com/dependabot/fetch-metadata/releases)
- [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.4.0...v2.5.0)
---
updated-dependencies:
- dependency-name: dependabot/fetch-metadata
dependency-version: 2.5.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
.github/workflows/auto-merge-dependabot.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/auto-merge-dependabot.yml b/.github/workflows/auto-merge-dependabot.yml
index d454cd186..ba2243c97 100644
--- a/.github/workflows/auto-merge-dependabot.yml
+++ b/.github/workflows/auto-merge-dependabot.yml
@@ -19,7 +19,7 @@ jobs:
steps:
- name: Dependabot metadata
id: metadata
- uses: dependabot/fetch-metadata@v2.4.0
+ uses: dependabot/fetch-metadata@v2.5.0
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
From 9792817c391be1b631a57462e0b417aa04c5f3d4 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Tue, 6 Jan 2026 08:16:45 -0500
Subject: [PATCH 027/388] docs: updates versions to clarify the ranges
---
docs/upgrade-guide-3.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/upgrade-guide-3.md b/docs/upgrade-guide-3.md
index e874a8998..49e467d24 100644
--- a/docs/upgrade-guide-3.md
+++ b/docs/upgrade-guide-3.md
@@ -11,11 +11,11 @@ We are excited to announce OpenAPI.NET v3.0! This major update introduces suppor
If you are using this library with [AspNetCore OpenAPI versions](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) `< 10.0` then you must remain on version `1.x` as it's not compatible with version 3 or above of this library.
-If you are using this library with [AspNetCore OpenAPI versions](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) `= 10.0` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library.
+If you are using this library with [AspNetCore OpenAPI versions](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) `= 10.X` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library.
If you are using this library with [Swashbuckle.AspNetCore version](https://www.nuget.org/packages/Swashbuckle.AspNetCore/) `< 10.0` then you must remain on version `1.x` as it's not compatible with version 3 or above of this library.
-If you are using this library with [Swashbuckle.AspNetCore version](https://www.nuget.org/packages/Swashbuckle.AspNetCore/) `= 10.0` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library.
+If you are using this library with [Swashbuckle.AspNetCore version](https://www.nuget.org/packages/Swashbuckle.AspNetCore/) `= 10.X` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library.
The latest support policy information for this library, and integration with ASP.NET Core can be found on [the contributing documentation](https://github.com/microsoft/OpenAPI.NET/blob/main/CONTRIBUTING.md#branches-and-support-policy).
From 4e4f4c6ed737bb759fce508cd2a6e8dd3c4e2084 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Tue, 6 Jan 2026 15:00:35 +0000
Subject: [PATCH 028/388] chore(main): release 3.1.2
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
Directory.Build.props | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 89c23baca..9d7db69f9 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.1.1"
+ ".": "3.1.2"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index be4068a9a..ed99a1173 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [3.1.2](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.1...v3.1.2) (2026-01-06)
+
+
+### Bug Fixes
+
+* correct error pointer when extension parser throws OpenApiException ([43c75a9](https://github.com/microsoft/OpenAPI.NET/commit/43c75a90746344fcc975611100e995fe4045edf0))
+* wrap extension parser calls in try-catch to ensure correct error pointers ([50b44aa](https://github.com/microsoft/OpenAPI.NET/commit/50b44aad12d8fa86a46f7f6d62896a7b1c344d2e))
+
## [3.1.1](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.0...v3.1.1) (2025-12-18)
diff --git a/Directory.Build.props b/Directory.Build.props
index 5aba3b052..c1b6e63d1 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.1.1
+ 3.1.2
From aef319c3093837b8ebb03c77f08f18ac9ad1a85d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 13 Jan 2026 21:25:18 +0000
Subject: [PATCH 029/388] chore(deps): bump dotnet-sdk from 8.0.416 to 8.0.417
Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 8.0.416 to 8.0.417.
- [Release notes](https://github.com/dotnet/sdk/releases)
- [Commits](https://github.com/dotnet/sdk/compare/v8.0.416...v8.0.417)
---
updated-dependencies:
- dependency-name: dotnet-sdk
dependency-version: 8.0.417
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
global.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/global.json b/global.json
index 3d946171e..4ca757b0e 100644
--- a/global.json
+++ b/global.json
@@ -1,5 +1,5 @@
{
"sdk": {
- "version": "8.0.416"
+ "version": "8.0.417"
}
}
\ No newline at end of file
From b05d54a75207f60e93592b9dc053db3ade5cbf75 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 13 Jan 2026 21:25:54 +0000
Subject: [PATCH 030/388] Bump the microsoftextensions group with 6 updates
Bumps Microsoft.Extensions.DependencyInjection from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.Logging from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.Logging.Console from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.Logging.Debug from 10.0.1 to 10.0.2
Bumps System.Text.Json from 10.0.1 to 10.0.2
---
updated-dependencies:
- dependency-name: Microsoft.Extensions.DependencyInjection
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging.Abstractions
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging.Console
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: System.Text.Json
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging.Console
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging.Debug
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
- dependency-name: Microsoft.Extensions.Logging.Debug
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: microsoftextensions
...
Signed-off-by: dependabot[bot]
---
performance/resultsComparer/resultsComparer.csproj | 10 +++++-----
.../Microsoft.OpenApi.Hidi.csproj | 8 ++++----
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/performance/resultsComparer/resultsComparer.csproj b/performance/resultsComparer/resultsComparer.csproj
index aab8f01bb..248caf5fa 100644
--- a/performance/resultsComparer/resultsComparer.csproj
+++ b/performance/resultsComparer/resultsComparer.csproj
@@ -8,12 +8,12 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj
index 458972ef0..2e955f3a6 100644
--- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj
+++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj
@@ -29,10 +29,10 @@
-
-
-
-
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
From eb07dc202cb6c4a2478f3251ee8c149808997b9f Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Wed, 14 Jan 2026 10:49:02 -0500
Subject: [PATCH 031/388] chore: aligns STJ package to avoid dependency
downgrade
---
.../Microsoft.OpenApi.Readers.Tests.csproj | 2 +-
test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj
index a49f77ebd..95365132f 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj
+++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
index 6913fdd97..8792e4404 100644
--- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
+++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
@@ -13,7 +13,7 @@
-
+
From 7610d07bd11a99a4ce1cc31338d180dbd764d952 Mon Sep 17 00:00:00 2001
From: Paul Spangler <7519484+spanglerco@users.noreply.github.com>
Date: Thu, 15 Jan 2026 15:33:52 -0600
Subject: [PATCH 032/388] fix: Support custom tag ordering
---
.../Models/OpenApiDocument.cs | 15 +++-
.../Models/OpenApiDocumentTests.cs | 76 +++++++++++++++++++
2 files changed, 88 insertions(+), 3 deletions(-)
diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
index 031eadb5d..3f12efef1 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
@@ -3,6 +3,9 @@
using System;
using System.Collections.Generic;
+#if NET
+using System.Collections.Immutable;
+#endif
using System.IO;
using System.Linq;
using System.Security.Cryptography;
@@ -83,9 +86,15 @@ public ISet? Tags
{
return;
}
- _tags = value is HashSet tags && tags.Comparer is OpenApiTagComparer ?
- tags :
- new HashSet(value, OpenApiTagComparer.Instance);
+ _tags = value switch
+ {
+ HashSet tags when tags.Comparer != EqualityComparer.Default => value,
+ SortedSet => value,
+#if NET
+ ImmutableSortedSet => value,
+#endif
+ _ => new HashSet(value, OpenApiTagComparer.Instance),
+ };
}
}
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs
index 5e3644f1b..8480269d2 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs
@@ -3,8 +3,11 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
+using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using VerifyXunit;
@@ -2126,6 +2129,79 @@ public void DeduplicatesTags()
Assert.Contains(document.Tags, t => t.Name == "tag2");
}
+ [Fact]
+ public void TagsSupportsCustomComparer()
+ {
+ var document = new OpenApiDocument
+ {
+ Tags = new HashSet(new CaseInsensitiveOpenApiTagEqualityComparer()),
+ };
+
+ Assert.True(document.Tags.Add(new OpenApiTag { Name = "Tag1" }));
+ Assert.False(document.Tags.Add(new OpenApiTag { Name = "tag1" }));
+ Assert.True(document.Tags.Add(new OpenApiTag { Name = "tag2" }));
+ Assert.False(document.Tags.Add(new OpenApiTag { Name = "TAG1" }));
+ Assert.Equal(2, document.Tags.Count);
+ }
+
+ private sealed class CaseInsensitiveOpenApiTagEqualityComparer : IEqualityComparer
+ {
+ public bool Equals(OpenApiTag x, OpenApiTag y)
+ {
+ return string.Equals(x.Name, y.Name, StringComparison.OrdinalIgnoreCase);
+ }
+
+ public int GetHashCode([DisallowNull] OpenApiTag obj)
+ {
+ return obj.Name.GetHashCode(StringComparison.OrdinalIgnoreCase);
+ }
+ }
+
+ [Fact]
+ public void TagsSupportsSortedSets()
+ {
+ var document = new OpenApiDocument
+ {
+ Tags = new SortedSet(new DescendingOpenApiTagComparer())
+ {
+ new OpenApiTag { Name = "tagB" },
+ new OpenApiTag { Name = "tagA" },
+ new OpenApiTag { Name = "tagC" },
+ }
+ };
+
+ var names = document.Tags.Select(t => t.Name);
+ Assert.Equal(["tagC", "tagB", "tagA"], names);
+ Assert.IsType>(document.Tags);
+ }
+
+ private sealed class DescendingOpenApiTagComparer : IComparer
+ {
+ public int Compare(OpenApiTag x, OpenApiTag y)
+ {
+ return string.Compare(y?.Name, x?.Name, StringComparison.Ordinal);
+ }
+ }
+
+ [Fact]
+ public void TagsSupportsImmutableSortedSets()
+ {
+ var document = new OpenApiDocument
+ {
+ Tags = ImmutableSortedSet.Create(
+ new DescendingOpenApiTagComparer(),
+ [
+ new OpenApiTag { Name = "tagB" },
+ new OpenApiTag { Name = "tagA" },
+ new OpenApiTag { Name = "tagC" },
+ ]),
+ };
+
+ var names = document.Tags.Select(t => t.Name);
+ Assert.Equal(["tagC", "tagB", "tagA"], names);
+ Assert.IsType>(document.Tags);
+ }
+
public static TheoryData OpenApiSpecVersions()
{
var values = new TheoryData();
From 0def7871a31cb81488f55a3e62d11e86865c18d5 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Fri, 16 Jan 2026 17:38:14 +0000
Subject: [PATCH 033/388] chore(support/v2): release 2.4.3
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
Directory.Build.props | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index bd1ba1cb3..2b7962cdd 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.4.2"
+ ".": "2.4.3"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b7d9b73f6..457ff02e5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [2.4.3](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.2...v2.4.3) (2026-01-16)
+
+
+### Bug Fixes
+
+* Support custom tag ordering ([008576c](https://github.com/microsoft/OpenAPI.NET/commit/008576c31f8dcecf59363c9c2f85d691601faa73))
+* Support custom tag ordering ([7610d07](https://github.com/microsoft/OpenAPI.NET/commit/7610d07bd11a99a4ce1cc31338d180dbd764d952))
+
## [2.4.2](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.1...v2.4.2) (2025-12-22)
diff --git a/Directory.Build.props b/Directory.Build.props
index a64e378aa..7b6a763dc 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.4.2
+ 2.4.3
From 3e44113d0f7e02382a635d22b6df10e03f20e985 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Fri, 16 Jan 2026 17:58:17 +0000
Subject: [PATCH 034/388] chore(main): release 3.1.3
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
Directory.Build.props | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 9d7db69f9..534c8ff8b 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.1.2"
+ ".": "3.1.3"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5fc036d34..44e6eba95 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [3.1.3](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.2...v3.1.3) (2026-01-16)
+
+
+### Bug Fixes
+
+* Support custom tag ordering ([008576c](https://github.com/microsoft/OpenAPI.NET/commit/008576c31f8dcecf59363c9c2f85d691601faa73))
+* Support custom tag ordering ([7610d07](https://github.com/microsoft/OpenAPI.NET/commit/7610d07bd11a99a4ce1cc31338d180dbd764d952))
+
## [3.1.2](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.1...v3.1.2) (2026-01-06)
### Bug Fixes
diff --git a/Directory.Build.props b/Directory.Build.props
index c1b6e63d1..b0681cf72 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.1.2
+ 3.1.3
From d2a6719fedf7e9f0ea6ea4484b723a7d39d41424 Mon Sep 17 00:00:00 2001
From: Steven Yeh
Date: Fri, 16 Jan 2026 19:32:14 -0600
Subject: [PATCH 035/388] Fix Typo in IOpenApiReadOnlyExtensible.cs
---
src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
index fac742d7d..c059842c0 100644
--- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
+++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
@@ -3,7 +3,7 @@
namespace Microsoft.OpenApi;
///
-/// Represents an Extensible Open API element elements can be rad from.
+/// Represents an Extensible Open API element elements can be read from.
///
public interface IOpenApiReadOnlyExtensible
{
From e38e511de5c90a4e73868cb292a2fff7cd7071a4 Mon Sep 17 00:00:00 2001
From: Steven Yeh
Date: Fri, 16 Jan 2026 19:32:14 -0600
Subject: [PATCH 036/388] Fix Typo in IOpenApiReadOnlyExtensible.cs
---
src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
index fac742d7d..c059842c0 100644
--- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
+++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
@@ -3,7 +3,7 @@
namespace Microsoft.OpenApi;
///
-/// Represents an Extensible Open API element elements can be rad from.
+/// Represents an Extensible Open API element elements can be read from.
///
public interface IOpenApiReadOnlyExtensible
{
From a8fb81cf9524a3f2f721aa808db244434e1cd177 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 19 Jan 2026 11:15:25 -0500
Subject: [PATCH 037/388] fix: discriminator property validation fails
any/allOf cases when it shouldn't
Signed-off-by: Vincent Biret
---
.../Validations/Rules/OpenApiSchemaRules.cs | 41 ++++----
.../PublicApi/PublicApi.approved.txt | 4 +
.../OpenApiSchemaValidationTests.cs | 99 ++++++++++++++++++-
3 files changed, 126 insertions(+), 18 deletions(-)
diff --git a/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs b/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs
index 70d558a13..4f2a122a9 100644
--- a/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs
+++ b/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs
@@ -5,6 +5,8 @@
namespace Microsoft.OpenApi
{
+ using System;
+ using System.ComponentModel;
using System.Linq;
///
@@ -48,6 +50,7 @@ public static class OpenApiSchemaRules
{
var discriminatorName = schema.Discriminator?.PropertyName;
+#pragma warning disable CS0618 // Type or member is obsolete
if (!ValidateChildSchemaAgainstDiscriminator(schema, discriminatorName))
{
context.Enter("discriminator");
@@ -56,6 +59,7 @@ public static class OpenApiSchemaRules
schema is OpenApiSchemaReference { Reference: not null} schemaReference ? schemaReference.Reference.Id : string.Empty, discriminatorName));
context.Exit();
}
+#pragma warning restore CS0618 // Type or member is obsolete
}
});
@@ -65,6 +69,8 @@ public static class OpenApiSchemaRules
/// The parent schema.
/// Adds support for polymorphism. The discriminator is an object name that is used to differentiate
/// between other schemas which may satisfy the payload description.
+ [Obsolete("This method will be made private in future versions.")]
+ [Browsable(false)]
public static bool ValidateChildSchemaAgainstDiscriminator(IOpenApiSchema schema, string? discriminatorName)
{
if (discriminatorName is not null)
@@ -72,15 +78,15 @@ public static bool ValidateChildSchemaAgainstDiscriminator(IOpenApiSchema schema
if (schema.Required is null || !schema.Required.Contains(discriminatorName))
{
// recursively check nested schema.OneOf, schema.AnyOf or schema.AllOf and their required fields for the discriminator
- if (schema.OneOf?.Count != 0)
+ if (schema.OneOf is { Count: > 0})
{
return TraverseSchemaElements(discriminatorName, schema.OneOf);
}
- if (schema.AnyOf?.Count != 0)
+ if (schema.AnyOf is { Count: > 0})
{
return TraverseSchemaElements(discriminatorName, schema.AnyOf);
}
- if (schema.AllOf?.Count != 0)
+ if (schema.AllOf is { Count: > 0})
{
return TraverseSchemaElements(discriminatorName, schema.AllOf);
}
@@ -102,25 +108,26 @@ public static bool ValidateChildSchemaAgainstDiscriminator(IOpenApiSchema schema
/// between other schemas which may satisfy the payload description.
/// The child schema.
///
+ [Obsolete("This method will be made private in future versions.")]
+ [Browsable(false)]
public static bool TraverseSchemaElements(string discriminatorName, IList? childSchema)
{
- if (childSchema is not null)
+ if (childSchema is null)
{
- foreach (var childItem in childSchema)
+ return false;
+ }
+ foreach (var childItem in childSchema)
+ {
+ if ((!childItem.Properties?.ContainsKey(discriminatorName) ?? false) &&
+ (!childItem.Required?.Contains(discriminatorName) ?? false))
{
- if ((!childItem.Properties?.ContainsKey(discriminatorName) ?? false) &&
- (!childItem.Required?.Contains(discriminatorName) ?? false))
- {
- return ValidateChildSchemaAgainstDiscriminator(childItem, discriminatorName);
- }
- else
- {
- return true;
- }
+ return ValidateChildSchemaAgainstDiscriminator(childItem, discriminatorName);
}
- return false;
- }
-
+ else
+ {
+ return true;
+ }
+ }
return false;
}
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 1446cb8d7..6a8ad3955 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -1352,7 +1352,11 @@ namespace Microsoft.OpenApi
{
public static Microsoft.OpenApi.ValidationRule ValidateSchemaDiscriminator { get; }
public static Microsoft.OpenApi.ValidationRule ValidateSchemaPropertyHasValue { get; }
+ [System.ComponentModel.Browsable(false)]
+ [System.Obsolete("This method will be made private in future versions.")]
public static bool TraverseSchemaElements(string discriminatorName, System.Collections.Generic.IList? childSchema) { }
+ [System.ComponentModel.Browsable(false)]
+ [System.Obsolete("This method will be made private in future versions.")]
public static bool ValidateChildSchemaAgainstDiscriminator(Microsoft.OpenApi.IOpenApiSchema schema, string? discriminatorName) { }
}
public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiSerializable
diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs
index f22806825..fdf36e0b4 100644
--- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs
@@ -246,7 +246,7 @@ public void ValidateSchemaRequiredFieldListMustContainThePropertySpecifiedInTheD
}
[Fact]
- public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminator()
+ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminatorOneOf()
{
// Arrange
var components = new OpenApiComponents
@@ -293,5 +293,102 @@ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscrim
//Assert
Assert.Empty(errors);
}
+
+ [Fact]
+ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminatorAnyOf()
+ {
+ // Arrange
+ var components = new OpenApiComponents
+ {
+ Schemas = new Dictionary
+ {
+ {
+ "Person",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array,
+ Discriminator = new()
+ {
+ PropertyName = "type"
+ },
+ AnyOf =
+ [
+ new OpenApiSchema()
+ {
+ Properties = new Dictionary
+ {
+ {
+ "type",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array
+ }
+ }
+ },
+ }
+ ],
+ }
+ }
+ }
+ };
+
+ // Act
+ var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
+ var walker = new OpenApiWalker(validator);
+ walker.Walk(components);
+
+ var errors = validator.Errors;
+
+ //Assert
+ Assert.Empty(errors);
+ }
+ [Fact]
+ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminatorAllOf()
+ {
+ // Arrange
+ var components = new OpenApiComponents
+ {
+ Schemas = new Dictionary
+ {
+ {
+ "Person",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array,
+ Discriminator = new()
+ {
+ PropertyName = "type"
+ },
+ AllOf =
+ [
+ new OpenApiSchema()
+ {
+ Properties = new Dictionary
+ {
+ {
+ "type",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array
+ }
+ }
+ },
+ }
+ ],
+ }
+ }
+ }
+ };
+
+ // Act
+ var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
+ var walker = new OpenApiWalker(validator);
+ walker.Walk(components);
+
+ var errors = validator.Errors;
+
+ //Assert
+ Assert.Empty(errors);
+ }
}
}
From 7def73d774d1f0e96118e92b636e52cbea371f2d Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 19 Jan 2026 11:15:25 -0500
Subject: [PATCH 038/388] fix: discriminator property validation fails
any/allOf cases when it shouldn't
Signed-off-by: Vincent Biret
---
.../Validations/Rules/OpenApiSchemaRules.cs | 41 ++++----
.../PublicApi/PublicApi.approved.txt | 4 +
.../OpenApiSchemaValidationTests.cs | 99 ++++++++++++++++++-
3 files changed, 126 insertions(+), 18 deletions(-)
diff --git a/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs b/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs
index 70d558a13..4f2a122a9 100644
--- a/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs
+++ b/src/Microsoft.OpenApi/Validations/Rules/OpenApiSchemaRules.cs
@@ -5,6 +5,8 @@
namespace Microsoft.OpenApi
{
+ using System;
+ using System.ComponentModel;
using System.Linq;
///
@@ -48,6 +50,7 @@ public static class OpenApiSchemaRules
{
var discriminatorName = schema.Discriminator?.PropertyName;
+#pragma warning disable CS0618 // Type or member is obsolete
if (!ValidateChildSchemaAgainstDiscriminator(schema, discriminatorName))
{
context.Enter("discriminator");
@@ -56,6 +59,7 @@ public static class OpenApiSchemaRules
schema is OpenApiSchemaReference { Reference: not null} schemaReference ? schemaReference.Reference.Id : string.Empty, discriminatorName));
context.Exit();
}
+#pragma warning restore CS0618 // Type or member is obsolete
}
});
@@ -65,6 +69,8 @@ public static class OpenApiSchemaRules
/// The parent schema.
/// Adds support for polymorphism. The discriminator is an object name that is used to differentiate
/// between other schemas which may satisfy the payload description.
+ [Obsolete("This method will be made private in future versions.")]
+ [Browsable(false)]
public static bool ValidateChildSchemaAgainstDiscriminator(IOpenApiSchema schema, string? discriminatorName)
{
if (discriminatorName is not null)
@@ -72,15 +78,15 @@ public static bool ValidateChildSchemaAgainstDiscriminator(IOpenApiSchema schema
if (schema.Required is null || !schema.Required.Contains(discriminatorName))
{
// recursively check nested schema.OneOf, schema.AnyOf or schema.AllOf and their required fields for the discriminator
- if (schema.OneOf?.Count != 0)
+ if (schema.OneOf is { Count: > 0})
{
return TraverseSchemaElements(discriminatorName, schema.OneOf);
}
- if (schema.AnyOf?.Count != 0)
+ if (schema.AnyOf is { Count: > 0})
{
return TraverseSchemaElements(discriminatorName, schema.AnyOf);
}
- if (schema.AllOf?.Count != 0)
+ if (schema.AllOf is { Count: > 0})
{
return TraverseSchemaElements(discriminatorName, schema.AllOf);
}
@@ -102,25 +108,26 @@ public static bool ValidateChildSchemaAgainstDiscriminator(IOpenApiSchema schema
/// between other schemas which may satisfy the payload description.
/// The child schema.
///
+ [Obsolete("This method will be made private in future versions.")]
+ [Browsable(false)]
public static bool TraverseSchemaElements(string discriminatorName, IList? childSchema)
{
- if (childSchema is not null)
+ if (childSchema is null)
{
- foreach (var childItem in childSchema)
+ return false;
+ }
+ foreach (var childItem in childSchema)
+ {
+ if ((!childItem.Properties?.ContainsKey(discriminatorName) ?? false) &&
+ (!childItem.Required?.Contains(discriminatorName) ?? false))
{
- if ((!childItem.Properties?.ContainsKey(discriminatorName) ?? false) &&
- (!childItem.Required?.Contains(discriminatorName) ?? false))
- {
- return ValidateChildSchemaAgainstDiscriminator(childItem, discriminatorName);
- }
- else
- {
- return true;
- }
+ return ValidateChildSchemaAgainstDiscriminator(childItem, discriminatorName);
}
- return false;
- }
-
+ else
+ {
+ return true;
+ }
+ }
return false;
}
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 39cfb8ccc..d0b8989ef 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -1261,7 +1261,11 @@ namespace Microsoft.OpenApi
{
public static Microsoft.OpenApi.ValidationRule ValidateSchemaDiscriminator { get; }
public static Microsoft.OpenApi.ValidationRule ValidateSchemaPropertyHasValue { get; }
+ [System.ComponentModel.Browsable(false)]
+ [System.Obsolete("This method will be made private in future versions.")]
public static bool TraverseSchemaElements(string discriminatorName, System.Collections.Generic.IList? childSchema) { }
+ [System.ComponentModel.Browsable(false)]
+ [System.Obsolete("This method will be made private in future versions.")]
public static bool ValidateChildSchemaAgainstDiscriminator(Microsoft.OpenApi.IOpenApiSchema schema, string? discriminatorName) { }
}
public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiSerializable
diff --git a/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs b/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs
index f22806825..fdf36e0b4 100644
--- a/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Validations/OpenApiSchemaValidationTests.cs
@@ -246,7 +246,7 @@ public void ValidateSchemaRequiredFieldListMustContainThePropertySpecifiedInTheD
}
[Fact]
- public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminator()
+ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminatorOneOf()
{
// Arrange
var components = new OpenApiComponents
@@ -293,5 +293,102 @@ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscrim
//Assert
Assert.Empty(errors);
}
+
+ [Fact]
+ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminatorAnyOf()
+ {
+ // Arrange
+ var components = new OpenApiComponents
+ {
+ Schemas = new Dictionary
+ {
+ {
+ "Person",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array,
+ Discriminator = new()
+ {
+ PropertyName = "type"
+ },
+ AnyOf =
+ [
+ new OpenApiSchema()
+ {
+ Properties = new Dictionary
+ {
+ {
+ "type",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array
+ }
+ }
+ },
+ }
+ ],
+ }
+ }
+ }
+ };
+
+ // Act
+ var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
+ var walker = new OpenApiWalker(validator);
+ walker.Walk(components);
+
+ var errors = validator.Errors;
+
+ //Assert
+ Assert.Empty(errors);
+ }
+ [Fact]
+ public void ValidateOneOfSchemaPropertyNameContainsPropertySpecifiedInTheDiscriminatorAllOf()
+ {
+ // Arrange
+ var components = new OpenApiComponents
+ {
+ Schemas = new Dictionary
+ {
+ {
+ "Person",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array,
+ Discriminator = new()
+ {
+ PropertyName = "type"
+ },
+ AllOf =
+ [
+ new OpenApiSchema()
+ {
+ Properties = new Dictionary
+ {
+ {
+ "type",
+ new OpenApiSchema
+ {
+ Type = JsonSchemaType.Array
+ }
+ }
+ },
+ }
+ ],
+ }
+ }
+ }
+ };
+
+ // Act
+ var validator = new OpenApiValidator(ValidationRuleSet.GetDefaultRuleSet());
+ var walker = new OpenApiWalker(validator);
+ walker.Walk(components);
+
+ var errors = validator.Errors;
+
+ //Assert
+ Assert.Empty(errors);
+ }
}
}
From 62e7d56ac0863875999240d68a2766d2cc2d594c Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 19 Jan 2026 13:13:05 -0500
Subject: [PATCH 039/388] feat: hidi validate command now logs warnings
Signed-off-by: Vincent Biret
---
src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
index 48f1d1c3e..a494b4f2e 100644
--- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
+++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
@@ -398,6 +398,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool
logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds);
LogErrors(logger, result);
+ LogWarnings(logger, result);
stopwatch.Stop();
}
@@ -652,7 +653,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl
private static void LogErrors(ILogger logger, ReadResult result)
{
var context = result.Diagnostic;
- if (context is not null && context.Errors.Count != 0)
+ if (context is { Errors.Count: > 0 })
{
using (logger.BeginScope("Detected errors"))
{
@@ -664,6 +665,21 @@ private static void LogErrors(ILogger logger, ReadResult result)
}
}
+ private static void LogWarnings(ILogger logger, ReadResult result)
+ {
+ var context = result.Diagnostic;
+ if (context is { Warnings.Count: > 0 })
+ {
+ using (logger.BeginScope("Detected warnings"))
+ {
+ foreach (var warning in context.Warnings)
+ {
+ logger.LogWarning("Detected warning during parsing: {Warning}", warning.ToString());
+ }
+ }
+ }
+ }
+
internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocument document, StreamWriter writer)
{
var rootNode = OpenApiUrlTreeNode.Create(document, "main");
From 18ed5acce9661639e1698f19c194e520eb5c93c1 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 19 Jan 2026 13:13:05 -0500
Subject: [PATCH 040/388] feat: hidi validate command now logs warnings
Signed-off-by: Vincent Biret
---
src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
index 797ec2359..b35cc2cbb 100644
--- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
+++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs
@@ -398,6 +398,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool
logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds);
LogErrors(logger, result);
+ LogWarnings(logger, result);
stopwatch.Stop();
}
@@ -652,7 +653,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl
private static void LogErrors(ILogger logger, ReadResult result)
{
var context = result.Diagnostic;
- if (context is not null && context.Errors.Count != 0)
+ if (context is { Errors.Count: > 0 })
{
using (logger.BeginScope("Detected errors"))
{
@@ -664,6 +665,21 @@ private static void LogErrors(ILogger logger, ReadResult result)
}
}
+ private static void LogWarnings(ILogger logger, ReadResult result)
+ {
+ var context = result.Diagnostic;
+ if (context is { Warnings.Count: > 0 })
+ {
+ using (logger.BeginScope("Detected warnings"))
+ {
+ foreach (var warning in context.Warnings)
+ {
+ logger.LogWarning("Detected warning during parsing: {Warning}", warning.ToString());
+ }
+ }
+ }
+ }
+
internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocument document, StreamWriter writer)
{
var rootNode = OpenApiUrlTreeNode.Create(document, "main");
From 686ca47a0c533cde12f51ef55c843a6c85cf8b7a Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Mon, 19 Jan 2026 13:26:59 -0500
Subject: [PATCH 041/388] docs: adds missing mention of references resolution
in the upgrade guide
Signed-off-by: Vincent Biret
---
docs/upgrade-guide-2.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/upgrade-guide-2.md b/docs/upgrade-guide-2.md
index 14eaacdf0..752b60c95 100644
--- a/docs/upgrade-guide-2.md
+++ b/docs/upgrade-guide-2.md
@@ -32,7 +32,7 @@ One of the key features of OpenAPI.NET is its performance. This version makes it
In v1, instances of `$ref` were resolved in a second pass of the document to ensure the target of the reference has been parsed before attempting to resolve it. In v2, reference targets are lazily resolved when reference objects are accessed. This improves load time performance for documents that make heavy use of references.
-[How does this change the behavior of external references?]
+Because references are lazily loaded and depend on the workspace context, loading a document with unresolved references (internal or external) does not lead to an exception being thrown anymore. Instead warnings are logged in the diagnostics object. This gives you an opportunity to load additional documents in the workspace if needed, [more information](#component-registration-in-a-documents-workspace).
### Results
From f09ce7915b3a43d18b68a9d155d2a838a71833fc Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Mon, 19 Jan 2026 18:59:57 +0000
Subject: [PATCH 042/388] chore(support/v2): release 2.5.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 14 ++++++++++++++
Directory.Build.props | 2 +-
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 2b7962cdd..4dedeaebc 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.4.3"
+ ".": "2.5.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 457ff02e5..3098a8f17 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,19 @@
# Changelog
+## [2.5.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.3...v2.5.0) (2026-01-19)
+
+
+### Features
+
+* hidi validate command now logs warnings ([1d3d085](https://github.com/microsoft/OpenAPI.NET/commit/1d3d085e0278d9341d7bd10065eba584cb25773c))
+* hidi validate command now logs warnings ([18ed5ac](https://github.com/microsoft/OpenAPI.NET/commit/18ed5acce9661639e1698f19c194e520eb5c93c1))
+
+
+### Bug Fixes
+
+* discriminator property validation fails any/allOf cases when it shouldn't ([ff6e411](https://github.com/microsoft/OpenAPI.NET/commit/ff6e4115dcab8c893bbc6b97639fd620b50f105e))
+* discriminator property validation fails any/allOf cases when it shouldn't ([7def73d](https://github.com/microsoft/OpenAPI.NET/commit/7def73d774d1f0e96118e92b636e52cbea371f2d))
+
## [2.4.3](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.2...v2.4.3) (2026-01-16)
diff --git a/Directory.Build.props b/Directory.Build.props
index 7b6a763dc..a4b8c77a1 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.4.3
+ 2.5.0
From b0dbb301261a50a0ebe8e47b7680739cd6d024f4 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Mon, 19 Jan 2026 19:00:33 +0000
Subject: [PATCH 043/388] chore(main): release 3.2.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 14 ++++++++++++++
Directory.Build.props | 2 +-
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 534c8ff8b..1f73031b8 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.1.3"
+ ".": "3.2.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 44e6eba95..a863b9118 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,19 @@
# Changelog
+## [3.2.0](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.3...v3.2.0) (2026-01-19)
+
+
+### Features
+
+* hidi validate command now logs warnings ([76a3c0f](https://github.com/microsoft/OpenAPI.NET/commit/76a3c0fe33a6c953263d9d91669b2f1bab562a79))
+* hidi validate command now logs warnings ([62e7d56](https://github.com/microsoft/OpenAPI.NET/commit/62e7d56ac0863875999240d68a2766d2cc2d594c))
+
+
+### Bug Fixes
+
+* discriminator property validation fails any/allOf cases when it shouldn't ([fb6cecc](https://github.com/microsoft/OpenAPI.NET/commit/fb6cecccafd5713bc1eb22e0cf07619cf495ebb5))
+* discriminator property validation fails any/allOf cases when it shouldn't ([a8fb81c](https://github.com/microsoft/OpenAPI.NET/commit/a8fb81cf9524a3f2f721aa808db244434e1cd177))
+
## [3.1.3](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.2...v3.1.3) (2026-01-16)
diff --git a/Directory.Build.props b/Directory.Build.props
index b0681cf72..028c4e6c5 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.1.3
+ 3.2.0
From a4efdfe43ee310fba4bb643d9fd28ce92da32338 Mon Sep 17 00:00:00 2001
From: mdaneri
Date: Wed, 21 Jan 2026 07:41:01 -0800
Subject: [PATCH 044/388] Support mutualTLS security scheme type (#2696)
feat(models): support mutualTLS security scheme
* fix(writers): throw for mutualTLS in OAS 3.0
---
.../Models/OpenApiSecurityScheme.cs | 16 ++++++++++++++++
.../Models/SecuritySchemeType.cs | 7 ++++++-
.../V32Tests/OpenApiSecuritySchemeTests.cs | 19 +++++++++++++++++++
.../mutualTlsSecurityScheme.yaml | 2 ++
.../Models/OpenApiSecuritySchemeTests.cs | 19 +++++++++++++++++++
.../PublicApi/PublicApi.approved.txt | 2 ++
6 files changed, 64 insertions(+), 1 deletion(-)
create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
index 4bee59619..57603e0aa 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
@@ -126,6 +126,14 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
// openIdConnectUrl
writer.WriteProperty(OpenApiConstants.OpenIdConnectUrl, OpenIdConnectUrl?.ToString());
break;
+ case SecuritySchemeType.MutualTLS:
+ // No additional properties for mutualTLS
+ if (version < OpenApiSpecVersion.OpenApi3_1)
+ {
+ // mutualTLS is introduced in OpenAPI 3.1
+ throw new OpenApiException($"mutualTLS security scheme is only supported in OpenAPI 3.1 and later versions. Current version: {version}");
+ }
+ break;
}
// deprecated - serialize as native field for v3.2+ or as extension for earlier versions
@@ -170,6 +178,14 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
return;
}
+ if (Type == SecuritySchemeType.MutualTLS)
+ {
+ // Bail because V2 does not support mutualTLS
+ writer.WriteStartObject();
+ writer.WriteEndObject();
+ return;
+ }
+
writer.WriteStartObject();
// type
diff --git a/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs b/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs
index 6c304597a..5640caa9a 100644
--- a/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs
+++ b/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs
@@ -26,6 +26,11 @@ public enum SecuritySchemeType
///
/// Use OAuth2 with OpenId Connect URL to discover OAuth2 configuration value.
///
- [Display("openIdConnect")] OpenIdConnect
+ [Display("openIdConnect")] OpenIdConnect,
+
+ ///
+ /// Use mutual TLS authentication.
+ ///
+ [Display("mutualTLS")] MutualTLS
}
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V32Tests/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V32Tests/OpenApiSecuritySchemeTests.cs
index e053d7405..ea0937237 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V32Tests/OpenApiSecuritySchemeTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V32Tests/OpenApiSecuritySchemeTests.cs
@@ -102,6 +102,25 @@ public async Task ParseOpenIdConnectSecuritySchemeShouldSucceed()
}, securityScheme);
}
+ [Fact]
+ public async Task ParseMutualTlsSecuritySchemeShouldSucceed()
+ {
+ // Act
+ var securityScheme = await OpenApiModelFactory.LoadAsync(
+ Path.Combine(SampleFolderPath, "mutualTlsSecurityScheme.yaml"),
+ OpenApiSpecVersion.OpenApi3_2,
+ new(),
+ SettingsFixture.ReaderSettings);
+
+ // Assert
+ Assert.Equivalent(
+ new OpenApiSecurityScheme
+ {
+ Type = SecuritySchemeType.MutualTLS,
+ Description = "Sample Description"
+ }, securityScheme);
+ }
+
[Fact]
public async Task ParseOAuth2SecuritySchemeWithDeviceAuthorizationUrlShouldSucceed()
{
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml b/test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml
new file mode 100644
index 000000000..72b4e9ae8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml
@@ -0,0 +1,2 @@
+type: mutualTLS
+description: Sample Description
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
index 1432d07cc..cd8499b9f 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
@@ -101,6 +101,12 @@ public class OpenApiSecuritySchemeTests
OpenIdConnectUrl = new("https://example.com/openIdConnect")
};
+ private static OpenApiSecurityScheme MutualTlsSecurityScheme => new()
+ {
+ Description = "description1",
+ Type = SecuritySchemeType.MutualTLS
+ };
+
private static OpenApiSecuritySchemeReference OpenApiSecuritySchemeReference => new("sampleSecurityScheme");
private static OpenApiSecurityScheme ReferencedSecurityScheme => new()
{
@@ -208,6 +214,19 @@ public async Task SerializeHttpBearerSecuritySchemeAsV3JsonWorks()
Assert.Equal(expected, actual);
}
+ [Fact]
+ public void SerializeMutualTlsSecuritySchemeAsV3Throws()
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter);
+
+ // Act & Assert
+ var exception = Assert.Throws(() => MutualTlsSecurityScheme.SerializeAsV3(writer));
+ Assert.Contains("mutualTLS security scheme is only supported in OpenAPI 3.1 and later versions", exception.Message);
+ Assert.Contains($"Current version: {OpenApiSpecVersion.OpenApi3_0}", exception.Message);
+ }
+
[Fact]
public async Task SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks()
{
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 6a8ad3955..59f1bce31 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -1933,6 +1933,8 @@ namespace Microsoft.OpenApi
OAuth2 = 2,
[Microsoft.OpenApi.Display("openIdConnect")]
OpenIdConnect = 3,
+ [Microsoft.OpenApi.Display("mutualTLS")]
+ MutualTLS = 4,
}
public abstract class SourceExpression : Microsoft.OpenApi.RuntimeExpression
{
From f9cf5b807d71c49e5bd7e2bec97f12d3b50ca180 Mon Sep 17 00:00:00 2001
From: mdaneri
Date: Wed, 21 Jan 2026 07:41:01 -0800
Subject: [PATCH 045/388] Support mutualTLS security scheme type (#2696)
feat(models): support mutualTLS security scheme
* fix(writers): throw for mutualTLS in OAS 3.0
---
.../Models/OpenApiSecurityScheme.cs | 16 ++++++++++++++++
.../Models/SecuritySchemeType.cs | 7 ++++++-
.../mutualTlsSecurityScheme.yaml | 2 ++
.../Models/OpenApiSecuritySchemeTests.cs | 19 +++++++++++++++++++
.../PublicApi/PublicApi.approved.txt | 2 ++
5 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
index 7d82f3219..50c2ba545 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
@@ -115,6 +115,14 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
// openIdConnectUrl
writer.WriteProperty(OpenApiConstants.OpenIdConnectUrl, OpenIdConnectUrl?.ToString());
break;
+ case SecuritySchemeType.MutualTLS:
+ // No additional properties for mutualTLS
+ if (version < OpenApiSpecVersion.OpenApi3_1)
+ {
+ // mutualTLS is introduced in OpenAPI 3.1
+ throw new OpenApiException($"mutualTLS security scheme is only supported in OpenAPI 3.1 and later versions. Current version: {version}");
+ }
+ break;
}
// extensions
@@ -146,6 +154,14 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
return;
}
+ if (Type == SecuritySchemeType.MutualTLS)
+ {
+ // Bail because V2 does not support mutualTLS
+ writer.WriteStartObject();
+ writer.WriteEndObject();
+ return;
+ }
+
writer.WriteStartObject();
// type
diff --git a/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs b/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs
index 6c304597a..5640caa9a 100644
--- a/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs
+++ b/src/Microsoft.OpenApi/Models/SecuritySchemeType.cs
@@ -26,6 +26,11 @@ public enum SecuritySchemeType
///
/// Use OAuth2 with OpenId Connect URL to discover OAuth2 configuration value.
///
- [Display("openIdConnect")] OpenIdConnect
+ [Display("openIdConnect")] OpenIdConnect,
+
+ ///
+ /// Use mutual TLS authentication.
+ ///
+ [Display("mutualTLS")] MutualTLS
}
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml b/test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml
new file mode 100644
index 000000000..72b4e9ae8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSecurityScheme/mutualTlsSecurityScheme.yaml
@@ -0,0 +1,2 @@
+type: mutualTLS
+description: Sample Description
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
index 1415d62a1..0b69e9de7 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
@@ -100,6 +100,12 @@ public class OpenApiSecuritySchemeTests
OpenIdConnectUrl = new("https://example.com/openIdConnect")
};
+ private static OpenApiSecurityScheme MutualTlsSecurityScheme => new()
+ {
+ Description = "description1",
+ Type = SecuritySchemeType.MutualTLS
+ };
+
private static OpenApiSecuritySchemeReference OpenApiSecuritySchemeReference => new("sampleSecurityScheme");
private static OpenApiSecurityScheme ReferencedSecurityScheme => new()
{
@@ -198,6 +204,19 @@ public async Task SerializeHttpBearerSecuritySchemeAsV3JsonWorks()
Assert.Equal(expected, actual);
}
+ [Fact]
+ public void SerializeMutualTlsSecuritySchemeAsV3Throws()
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter);
+
+ // Act & Assert
+ var exception = Assert.Throws(() => MutualTlsSecurityScheme.SerializeAsV3(writer));
+ Assert.Contains("mutualTLS security scheme is only supported in OpenAPI 3.1 and later versions", exception.Message);
+ Assert.Contains($"Current version: {OpenApiSpecVersion.OpenApi3_0}", exception.Message);
+ }
+
[Fact]
public async Task SerializeOAuthSingleFlowSecuritySchemeAsV3JsonWorks()
{
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index d0b8989ef..fc0b3db73 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -1808,6 +1808,8 @@ namespace Microsoft.OpenApi
OAuth2 = 2,
[Microsoft.OpenApi.Display("openIdConnect")]
OpenIdConnect = 3,
+ [Microsoft.OpenApi.Display("mutualTLS")]
+ MutualTLS = 4,
}
public abstract class SourceExpression : Microsoft.OpenApi.RuntimeExpression
{
From 9e13b2574e68387ecc01c453b571208c40124b46 Mon Sep 17 00:00:00 2001
From: mdaneri
Date: Wed, 21 Jan 2026 08:32:08 -0800
Subject: [PATCH 046/388] feat(models): add shared Content interface (#2695)
feat(models): add shared Content interface
* Update src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
Co-authored-by: Vincent Biret
* Update src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
Co-authored-by: Vincent Biret
* Update src/Microsoft.OpenApi/Models/OpenApiHeader.cs
Co-authored-by: Vincent Biret
* Update src/Microsoft.OpenApi/Models/OpenApiResponse.cs
Co-authored-by: Vincent Biret
* Remove inheritance from IOpenApiReadOnlyContentElement
revert commit 7758a8193a391629d82995881763bba3911b767e
* Update src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
Co-authored-by: Vincent Biret
* test(publicapi): approve content interface surface
---------
Co-authored-by: Vincent Biret
---
.../Interfaces/IOpenApiContentElement.cs | 27 ++++++++++++++
.../Models/Interfaces/IOpenApiHeader.cs | 7 +---
.../Models/Interfaces/IOpenApiParameter.cs | 13 +------
.../Models/Interfaces/IOpenApiRequestBody.cs | 7 +---
.../Models/Interfaces/IOpenApiResponse.cs | 8 +----
src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 7 ++--
.../Models/OpenApiParameter.cs | 21 +++++++----
.../Models/OpenApiRequestBody.cs | 19 +++++-----
.../Models/OpenApiResponse.cs | 6 ++--
.../PublicApi/PublicApi.approved.txt | 36 ++++++++++---------
10 files changed, 84 insertions(+), 67 deletions(-)
create mode 100644 src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
new file mode 100644
index 000000000..15725d4fc
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+
+namespace Microsoft.OpenApi;
+
+///
+/// Describes an element that has content.
+///
+public interface IOpenApiContentElement
+{
+ ///
+ /// A map containing descriptions of potential payloads.
+ /// The key is a media type or media type range and the value describes it.
+ ///
+ IDictionary? Content { get; set; }
+}
+
+///
+/// Describes an element that has content.
+///
+public interface IOpenApiReadOnlyContentElement
+{
+ ///
+ /// A map containing descriptions of potential payloads.
+ /// The key is a media type or media type range and the value describes it.
+ ///
+ IDictionary? Content { get; }
+}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
index 55e484555..8104c72ed 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
@@ -8,7 +8,7 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the headers object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// Determines whether this header is mandatory.
@@ -58,9 +58,4 @@ public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExte
///
public IDictionary? Examples { get; }
- ///
- /// A map containing the representations for the header.
- ///
- public IDictionary? Content { get; }
-
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
index 5669a0bb3..405d04fab 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
@@ -7,7 +7,7 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the parameter object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// REQUIRED. The name of the parameter. Parameter names are case sensitive.
@@ -93,15 +93,4 @@ public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyE
/// Assign to use get null as a serialized value.
///
public JsonNode? Example { get; }
-
- ///
- /// A map containing the representations for the parameter.
- /// The key is the media type and the value describes it.
- /// The map MUST only contain one entry.
- /// For more complex scenarios, the content property can define the media type and schema of the parameter.
- /// A parameter MUST contain either a schema property, or a content property, but not both.
- /// When example or examples are provided in conjunction with the schema object,
- /// the example MUST follow the prescribed serialization strategy for the parameter.
- ///
- public IDictionary? Content { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
index 5ab2f7174..2e722b0f5 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
@@ -6,18 +6,13 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the request body object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// Determines if the request body is required in the request. Defaults to false.
///
public bool Required { get; }
- ///
- /// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
- /// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
- ///
- public IDictionary? Content { get; }
///
/// Converts the request body to a body parameter in preparation for a v2 serialization.
///
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
index d0423771f..6823868f2 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
@@ -6,19 +6,13 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the response object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiSummarizedElement
+public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiSummarizedElement, IOpenApiReadOnlyContentElement
{
///
/// Maps a header name to its definition.
///
public IDictionary? Headers { get; }
- ///
- /// A map containing descriptions of potential response payloads.
- /// The key is a media type or media type range and the value describes it.
- ///
- public IDictionary? Content { get; }
-
///
/// A map of operations links that can be followed from the response.
/// The key of the map is a short name for the link,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
index 7e5ea273f..9ec42aa06 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi
/// Header Object.
/// The Header Object follows the structure of the Parameter Object.
///
- public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible
+ public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible, IOpenApiContentElement
{
///
public string? Description { get; set; }
@@ -98,7 +98,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -175,7 +175,8 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false);
// schema
- var targetSchema = Schema switch {
+ var targetSchema = Schema switch
+ {
OpenApiSchemaReference schemaReference => schemaReference.RecursiveTarget,
OpenApiSchema schema => schema,
_ => null,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
index d6b060a78..14294cbd8 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi
///
/// Parameter Object.
///
- public class OpenApiParameter : IOpenApiExtensible, IOpenApiParameter
+ public class OpenApiParameter : IOpenApiExtensible, IOpenApiParameter, IOpenApiContentElement
{
private bool? _explode;
private ParameterStyle? _style;
@@ -60,7 +60,15 @@ public bool Explode
///
public JsonNode? Example { get; set; }
- ///
+ ///
+ /// A map containing the representations for the parameter.
+ /// The key is the media type and the value describes it.
+ /// The map MUST only contain one entry.
+ /// For more complex scenarios, the content property can define the media type and schema of the parameter.
+ /// A parameter MUST contain either a schema property, or a content property, but not both.
+ /// When example or examples are provided in conjunction with the schema object,
+ /// the example MUST follow the prescribed serialization strategy for the parameter.
+ ///
public IDictionary? Content { get; set; }
///
@@ -111,11 +119,11 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
-
+
// Validate that Cookie style is only used in OpenAPI 3.2 and later
if (Style == ParameterStyle.Cookie && version < OpenApiSpecVersion.OpenApi3_2)
{
@@ -226,7 +234,8 @@ internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Diction
// uniqueItems
// enum
// multipleOf
- var targetSchema = Schema switch {
+ var targetSchema = Schema switch
+ {
OpenApiSchemaReference schemaReference => schemaReference.RecursiveTarget,
OpenApiSchema schema => schema,
_ => null,
@@ -271,7 +280,7 @@ internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Diction
public virtual void SerializeAsV2(IOpenApiWriter writer)
{
Utils.CheckArgumentNull(writer);
-
+
// Validate that Cookie style is only used in OpenAPI 3.2 and later
if (Style == ParameterStyle.Cookie)
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
index fa29d3ea0..225837544 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
@@ -10,7 +10,7 @@ namespace Microsoft.OpenApi
///
/// Request Body Object
///
- public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody
+ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody, IOpenApiContentElement
{
///
public string? Description { get; set; }
@@ -18,7 +18,10 @@ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody
///
public bool Required { get; set; }
- ///
+ ///
+ /// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
+ /// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
+ ///
public IDictionary? Content { get; set; }
///
@@ -64,7 +67,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
-
+
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
@@ -110,7 +113,7 @@ public IOpenApiParameter ConvertToBodyParameter(IOpenApiWriter writer)
Extensions = Extensions?.ToDictionary(static k => k.Key, static v => v.Value)
};
// Clone extensions so we can remove the x-bodyName extensions from the output V2 model.
- if (bodyParameter.Extensions is not null &&
+ if (bodyParameter.Extensions is not null &&
bodyParameter.Extensions.TryGetValue(OpenApiConstants.BodyName, out var bodyNameExtension) &&
bodyNameExtension is JsonNodeExtension bodyName)
{
@@ -126,7 +129,7 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
if (Content == null || !Content.Any())
yield break;
var properties = Content.First().Value.Schema?.Properties;
- if(properties != null)
+ if (properties != null)
{
foreach (var property in properties)
{
@@ -144,11 +147,11 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
OpenApiSchemaReference => throw new InvalidOperationException("Unresolved reference target"),
_ => throw new InvalidOperationException("Unexpected schema type")
};
-
+
updatedSchema.Type = "file".ToJsonSchemaType();
updatedSchema.Format = null;
paramSchema = updatedSchema;
-
+
}
yield return new OpenApiFormDataParameter()
{
@@ -159,7 +162,7 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
Required = Content.First().Value.Schema?.Required?.Contains(property.Key) ?? false
};
}
- }
+ }
}
///
diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
index 4ee39336e..6cc0000df 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
@@ -10,7 +10,7 @@ namespace Microsoft.OpenApi
///
/// Response object.
///
- public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse
+ public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse, IOpenApiContentElement
{
///
public string? Summary { get; set; }
@@ -73,7 +73,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -177,7 +177,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
// so remove it from the cloned collection so we don't write it again.
extensionsClone?.Remove(key);
}
- }
+ }
}
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 59f1bce31..5413879c0 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -109,6 +109,10 @@ namespace Microsoft.OpenApi
{
System.Collections.Generic.Dictionary? PathItems { get; }
}
+ public interface IOpenApiContentElement
+ {
+ System.Collections.Generic.IDictionary? Content { get; set; }
+ }
public interface IOpenApiDescribedElement : Microsoft.OpenApi.IOpenApiElement
{
string? Description { get; set; }
@@ -129,11 +133,10 @@ namespace Microsoft.OpenApi
{
void Write(Microsoft.OpenApi.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion);
}
- public interface IOpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
bool AllowEmptyValue { get; }
bool AllowReserved { get; }
- System.Collections.Generic.IDictionary? Content { get; }
bool Deprecated { get; }
System.Text.Json.Nodes.JsonNode? Example { get; }
System.Collections.Generic.IDictionary? Examples { get; }
@@ -160,11 +163,10 @@ namespace Microsoft.OpenApi
System.Collections.Generic.IList? PrefixEncoding { get; }
Microsoft.OpenApi.IOpenApiSchema? Schema { get; }
}
- public interface IOpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
bool AllowEmptyValue { get; }
bool AllowReserved { get; }
- System.Collections.Generic.IDictionary? Content { get; }
bool Deprecated { get; }
System.Text.Json.Nodes.JsonNode? Example { get; }
System.Collections.Generic.IDictionary? Examples { get; }
@@ -181,6 +183,10 @@ namespace Microsoft.OpenApi
System.Collections.Generic.IList? Parameters { get; }
System.Collections.Generic.IList? Servers { get; }
}
+ public interface IOpenApiReadOnlyContentElement
+ {
+ System.Collections.Generic.IDictionary? Content { get; }
+ }
public interface IOpenApiReadOnlyDescribedElement : Microsoft.OpenApi.IOpenApiElement
{
string? Description { get; }
@@ -214,16 +220,14 @@ namespace Microsoft.OpenApi
U CopyReferenceAsTargetElementWithOverrides(U source);
}
public interface IOpenApiReferenceable : Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiSerializable { }
- public interface IOpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
- System.Collections.Generic.IDictionary? Content { get; }
bool Required { get; }
Microsoft.OpenApi.IOpenApiParameter? ConvertToBodyParameter(Microsoft.OpenApi.IOpenApiWriter writer);
System.Collections.Generic.IEnumerable? ConvertToFormDataParameters(Microsoft.OpenApi.IOpenApiWriter writer);
}
- public interface IOpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
{
- System.Collections.Generic.IDictionary? Content { get; }
System.Collections.Generic.IDictionary? Headers { get; }
System.Collections.Generic.IDictionary? Links { get; }
}
@@ -787,7 +791,7 @@ namespace Microsoft.OpenApi
public static Microsoft.OpenApi.OpenApiUrlTreeNode CreateOpenApiUrlTreeNode(System.Collections.Generic.Dictionary sources) { }
public static System.Func CreatePredicate(string? operationIds = null, string? tags = null, System.Collections.Generic.Dictionary>? requestUrls = null, Microsoft.OpenApi.OpenApiDocument? source = null) { }
}
- public class OpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiHeader : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiHeader() { }
public bool AllowEmptyValue { get; set; }
@@ -808,7 +812,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiHeaderReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiHeaderReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiHeaderReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public bool AllowEmptyValue { get; }
@@ -1023,7 +1027,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiParameter : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiParameter() { }
public bool AllowEmptyValue { get; set; }
@@ -1046,7 +1050,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiParameterReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiParameterReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiParameterReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public bool AllowEmptyValue { get; }
@@ -1151,7 +1155,7 @@ namespace Microsoft.OpenApi
protected override void SerializeAdditionalV32Properties(Microsoft.OpenApi.IOpenApiWriter writer) { }
protected override void SetAdditional31MetadataFromMapNode(System.Text.Json.Nodes.JsonObject jsonObject) { }
}
- public class OpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiRequestBody : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiRequestBody() { }
public System.Collections.Generic.IDictionary? Content { get; set; }
@@ -1166,7 +1170,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiRequestBodyReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiRequestBodyReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiRequestBodyReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public System.Collections.Generic.IDictionary? Content { get; }
@@ -1180,7 +1184,7 @@ namespace Microsoft.OpenApi
public Microsoft.OpenApi.IOpenApiRequestBody CreateShallowCopy() { }
public override void SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiResponse : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiResponse() { }
public System.Collections.Generic.IDictionary? Content { get; set; }
@@ -1195,7 +1199,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiResponseReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiResponseReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiResponseReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public System.Collections.Generic.IDictionary? Content { get; }
From 069f8432788b2ac1dca3d27b07f4e68b40f53c46 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Wed, 21 Jan 2026 16:32:59 +0000
Subject: [PATCH 047/388] chore(main): release 3.3.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 9 +++++++++
Directory.Build.props | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 1f73031b8..ff1c7af58 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.2.0"
+ ".": "3.3.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a863b9118..8855d4438 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## [3.3.0](https://github.com/microsoft/OpenAPI.NET/compare/v3.2.0...v3.3.0) (2026-01-21)
+
+
+### Features
+
+* **models:** add shared Content interface ([9e13b25](https://github.com/microsoft/OpenAPI.NET/commit/9e13b2574e68387ecc01c453b571208c40124b46))
+* **models:** add shared Content interface ([#2695](https://github.com/microsoft/OpenAPI.NET/issues/2695)) ([9e13b25](https://github.com/microsoft/OpenAPI.NET/commit/9e13b2574e68387ecc01c453b571208c40124b46))
+* **models:** support mutualTLS security scheme ([a4efdfe](https://github.com/microsoft/OpenAPI.NET/commit/a4efdfe43ee310fba4bb643d9fd28ce92da32338))
+
## [3.2.0](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.3...v3.2.0) (2026-01-19)
diff --git a/Directory.Build.props b/Directory.Build.props
index 028c4e6c5..36284217c 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.2.0
+ 3.3.0
From 80e4bbfa4ab31d3af69fe29751714d001c1f9566 Mon Sep 17 00:00:00 2001
From: mdaneri
Date: Wed, 21 Jan 2026 08:32:08 -0800
Subject: [PATCH 048/388] feat(models): add shared Content interface (#2695)
feat(models): add shared Content interface
* Update src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
Co-authored-by: Vincent Biret
* Update src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
Co-authored-by: Vincent Biret
* Update src/Microsoft.OpenApi/Models/OpenApiHeader.cs
Co-authored-by: Vincent Biret
* Update src/Microsoft.OpenApi/Models/OpenApiResponse.cs
Co-authored-by: Vincent Biret
* Remove inheritance from IOpenApiReadOnlyContentElement
revert commit 7758a8193a391629d82995881763bba3911b767e
* Update src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
Co-authored-by: Vincent Biret
* test(publicapi): approve content interface surface
---------
Co-authored-by: Vincent Biret
Signed-off-by: Vincent Biret
---
.../Interfaces/IOpenApiContentElement.cs | 27 ++++++++++++++
.../Models/Interfaces/IOpenApiHeader.cs | 8 +----
.../Models/Interfaces/IOpenApiParameter.cs | 13 +------
.../Models/Interfaces/IOpenApiRequestBody.cs | 7 +---
.../Models/Interfaces/IOpenApiResponse.cs | 8 +----
src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 7 ++--
.../Models/OpenApiParameter.cs | 17 ++++++---
.../Models/OpenApiRequestBody.cs | 19 +++++-----
.../Models/OpenApiResponse.cs | 6 ++--
.../PublicApi/PublicApi.approved.txt | 36 ++++++++++---------
10 files changed, 82 insertions(+), 66 deletions(-)
create mode 100644 src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
new file mode 100644
index 000000000..15dcd955e
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+
+namespace Microsoft.OpenApi;
+
+///
+/// Describes an element that has content.
+///
+public interface IOpenApiContentElement
+{
+ ///
+ /// A map containing descriptions of potential payloads.
+ /// The key is a media type or media type range and the value describes it.
+ ///
+ IDictionary? Content { get; set; }
+}
+
+///
+/// Describes an element that has content.
+///
+public interface IOpenApiReadOnlyContentElement
+{
+ ///
+ /// A map containing descriptions of potential payloads.
+ /// The key is a media type or media type range and the value describes it.
+ ///
+ IDictionary? Content { get; }
+}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
index 04c24b5b2..5f65c39b4 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
@@ -8,7 +8,7 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the headers object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// Determines whether this header is mandatory.
@@ -57,10 +57,4 @@ public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// Examples of the media type.
///
public IDictionary? Examples { get; }
-
- ///
- /// A map containing the representations for the header.
- ///
- public IDictionary? Content { get; }
-
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
index 312517acb..405d04fab 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
@@ -7,7 +7,7 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the parameter object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// REQUIRED. The name of the parameter. Parameter names are case sensitive.
@@ -93,15 +93,4 @@ public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyE
/// Assign to use get null as a serialized value.
///
public JsonNode? Example { get; }
-
- ///
- /// A map containing the representations for the parameter.
- /// The key is the media type and the value describes it.
- /// The map MUST only contain one entry.
- /// For more complex scenarios, the content property can define the media type and schema of the parameter.
- /// A parameter MUST contain either a schema property, or a content property, but not both.
- /// When example or examples are provided in conjunction with the schema object,
- /// the example MUST follow the prescribed serialization strategy for the parameter.
- ///
- public IDictionary? Content { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
index dfe1e1715..2e722b0f5 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
@@ -6,18 +6,13 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the request body object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// Determines if the request body is required in the request. Defaults to false.
///
public bool Required { get; }
- ///
- /// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
- /// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
- ///
- public IDictionary? Content { get; }
///
/// Converts the request body to a body parameter in preparation for a v2 serialization.
///
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
index dfddd7838..07ef60f3d 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
@@ -6,19 +6,13 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the response object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
+public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
{
///
/// Maps a header name to its definition.
///
public IDictionary? Headers { get; }
- ///
- /// A map containing descriptions of potential response payloads.
- /// The key is a media type or media type range and the value describes it.
- ///
- public IDictionary? Content { get; }
-
///
/// A map of operations links that can be followed from the response.
/// The key of the map is a short name for the link,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
index 8bb155f85..33f119e4d 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi
/// Header Object.
/// The Header Object follows the structure of the Parameter Object.
///
- public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible
+ public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible, IOpenApiContentElement
{
///
public string? Description { get; set; }
@@ -90,7 +90,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -167,7 +167,8 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false);
// schema
- var targetSchema = Schema switch {
+ var targetSchema = Schema switch
+ {
OpenApiSchemaReference schemaReference => schemaReference.RecursiveTarget,
OpenApiSchema schema => schema,
_ => null,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
index 63b3735e2..0ea9ef57b 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi
///
/// Parameter Object.
///
- public class OpenApiParameter : IOpenApiExtensible, IOpenApiParameter
+ public class OpenApiParameter : IOpenApiExtensible, IOpenApiParameter, IOpenApiContentElement
{
private bool? _explode;
private ParameterStyle? _style;
@@ -60,7 +60,15 @@ public bool Explode
///
public JsonNode? Example { get; set; }
- ///
+ ///
+ /// A map containing the representations for the parameter.
+ /// The key is the media type and the value describes it.
+ /// The map MUST only contain one entry.
+ /// For more complex scenarios, the content property can define the media type and schema of the parameter.
+ /// A parameter MUST contain either a schema property, or a content property, but not both.
+ /// When example or examples are provided in conjunction with the schema object,
+ /// the example MUST follow the prescribed serialization strategy for the parameter.
+ ///
public IDictionary? Content { get; set; }
///
@@ -105,7 +113,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -200,7 +208,8 @@ internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Diction
// uniqueItems
// enum
// multipleOf
- var targetSchema = Schema switch {
+ var targetSchema = Schema switch
+ {
OpenApiSchemaReference schemaReference => schemaReference.RecursiveTarget,
OpenApiSchema schema => schema,
_ => null,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
index 8f4c1bd90..73d5e9a98 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
@@ -10,7 +10,7 @@ namespace Microsoft.OpenApi
///
/// Request Body Object
///
- public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody
+ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody, IOpenApiContentElement
{
///
public string? Description { get; set; }
@@ -18,7 +18,10 @@ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody
///
public bool Required { get; set; }
- ///
+ ///
+ /// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
+ /// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
+ ///
public IDictionary? Content { get; set; }
///
@@ -56,7 +59,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
-
+
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
@@ -102,7 +105,7 @@ public IOpenApiParameter ConvertToBodyParameter(IOpenApiWriter writer)
Extensions = Extensions?.ToDictionary(static k => k.Key, static v => v.Value)
};
// Clone extensions so we can remove the x-bodyName extensions from the output V2 model.
- if (bodyParameter.Extensions is not null &&
+ if (bodyParameter.Extensions is not null &&
bodyParameter.Extensions.TryGetValue(OpenApiConstants.BodyName, out var bodyNameExtension) &&
bodyNameExtension is JsonNodeExtension bodyName)
{
@@ -118,7 +121,7 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
if (Content == null || !Content.Any())
yield break;
var properties = Content.First().Value.Schema?.Properties;
- if(properties != null)
+ if (properties != null)
{
foreach (var property in properties)
{
@@ -136,11 +139,11 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
OpenApiSchemaReference => throw new InvalidOperationException("Unresolved reference target"),
_ => throw new InvalidOperationException("Unexpected schema type")
};
-
+
updatedSchema.Type = "file".ToJsonSchemaType();
updatedSchema.Format = null;
paramSchema = updatedSchema;
-
+
}
yield return new OpenApiFormDataParameter()
{
@@ -151,7 +154,7 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
Required = Content.First().Value.Schema?.Required?.Contains(property.Key) ?? false
};
}
- }
+ }
}
///
diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
index 6c1af10f1..4023efaf5 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
@@ -10,7 +10,7 @@ namespace Microsoft.OpenApi
///
/// Response object.
///
- public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse
+ public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse, IOpenApiContentElement
{
///
public string? Description { get; set; }
@@ -61,7 +61,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -153,7 +153,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
// so remove it from the cloned collection so we don't write it again.
extensionsClone?.Remove(key);
}
- }
+ }
}
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index d0b8989ef..167896e37 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -106,6 +106,10 @@ namespace Microsoft.OpenApi
{
System.Collections.Generic.Dictionary? PathItems { get; }
}
+ public interface IOpenApiContentElement
+ {
+ System.Collections.Generic.IDictionary? Content { get; set; }
+ }
public interface IOpenApiDescribedElement : Microsoft.OpenApi.IOpenApiElement
{
string? Description { get; set; }
@@ -124,11 +128,10 @@ namespace Microsoft.OpenApi
{
void Write(Microsoft.OpenApi.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion);
}
- public interface IOpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
bool AllowEmptyValue { get; }
bool AllowReserved { get; }
- System.Collections.Generic.IDictionary? Content { get; }
bool Deprecated { get; }
System.Text.Json.Nodes.JsonNode? Example { get; }
System.Collections.Generic.IDictionary? Examples { get; }
@@ -145,11 +148,10 @@ namespace Microsoft.OpenApi
Microsoft.OpenApi.RuntimeExpressionAnyWrapper? RequestBody { get; }
Microsoft.OpenApi.OpenApiServer? Server { get; }
}
- public interface IOpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
bool AllowEmptyValue { get; }
bool AllowReserved { get; }
- System.Collections.Generic.IDictionary? Content { get; }
bool Deprecated { get; }
System.Text.Json.Nodes.JsonNode? Example { get; }
System.Collections.Generic.IDictionary? Examples { get; }
@@ -166,6 +168,10 @@ namespace Microsoft.OpenApi
System.Collections.Generic.IList? Parameters { get; }
System.Collections.Generic.IList? Servers { get; }
}
+ public interface IOpenApiReadOnlyContentElement
+ {
+ System.Collections.Generic.IDictionary? Content { get; }
+ }
public interface IOpenApiReadOnlyDescribedElement : Microsoft.OpenApi.IOpenApiElement
{
string? Description { get; }
@@ -199,16 +205,14 @@ namespace Microsoft.OpenApi
U CopyReferenceAsTargetElementWithOverrides(U source);
}
public interface IOpenApiReferenceable : Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiSerializable { }
- public interface IOpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
- System.Collections.Generic.IDictionary? Content { get; }
bool Required { get; }
Microsoft.OpenApi.IOpenApiParameter? ConvertToBodyParameter(Microsoft.OpenApi.IOpenApiWriter writer);
System.Collections.Generic.IEnumerable? ConvertToFormDataParameters(Microsoft.OpenApi.IOpenApiWriter writer);
}
- public interface IOpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
- System.Collections.Generic.IDictionary? Content { get; }
System.Collections.Generic.IDictionary? Headers { get; }
System.Collections.Generic.IDictionary? Links { get; }
}
@@ -736,7 +740,7 @@ namespace Microsoft.OpenApi
public static Microsoft.OpenApi.OpenApiUrlTreeNode CreateOpenApiUrlTreeNode(System.Collections.Generic.Dictionary sources) { }
public static System.Func CreatePredicate(string? operationIds = null, string? tags = null, System.Collections.Generic.Dictionary>? requestUrls = null, Microsoft.OpenApi.OpenApiDocument? source = null) { }
}
- public class OpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiHeader : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiHeader() { }
public bool AllowEmptyValue { get; set; }
@@ -756,7 +760,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiHeaderReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiHeaderReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiHeaderReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public bool AllowEmptyValue { get; }
@@ -941,7 +945,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiParameter : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiParameter() { }
public bool AllowEmptyValue { get; set; }
@@ -963,7 +967,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiParameterReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiParameterReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiParameterReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public bool AllowEmptyValue { get; }
@@ -1065,7 +1069,7 @@ namespace Microsoft.OpenApi
protected override void SerializeAdditionalV31Properties(Microsoft.OpenApi.IOpenApiWriter writer) { }
protected override void SetAdditional31MetadataFromMapNode(System.Text.Json.Nodes.JsonObject jsonObject) { }
}
- public class OpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiRequestBody : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiRequestBody() { }
public System.Collections.Generic.IDictionary? Content { get; set; }
@@ -1079,7 +1083,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiRequestBodyReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiRequestBodyReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiRequestBodyReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public System.Collections.Generic.IDictionary? Content { get; }
@@ -1093,7 +1097,7 @@ namespace Microsoft.OpenApi
public Microsoft.OpenApi.IOpenApiRequestBody CreateShallowCopy() { }
public override void SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiResponse : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiResponse() { }
public System.Collections.Generic.IDictionary? Content { get; set; }
@@ -1106,7 +1110,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiResponseReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiResponseReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiResponseReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public System.Collections.Generic.IDictionary? Content { get; }
From 67899ae3c64615be6e743594cd01b63a70e9ff0d Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Wed, 21 Jan 2026 17:55:22 +0000
Subject: [PATCH 049/388] chore(support/v2): release 2.6.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 10 ++++++++++
Directory.Build.props | 2 +-
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 4dedeaebc..511dd5165 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.5.0"
+ ".": "2.6.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3098a8f17..00819c348 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## [2.6.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.5.0...v2.6.0) (2026-01-21)
+
+
+### Features
+
+* **models:** add shared Content interface ([80e4bbf](https://github.com/microsoft/OpenAPI.NET/commit/80e4bbfa4ab31d3af69fe29751714d001c1f9566))
+* **models:** add shared Content interface ([#2695](https://github.com/microsoft/OpenAPI.NET/issues/2695)) ([338566f](https://github.com/microsoft/OpenAPI.NET/commit/338566fafce04ee1329f4ead61fe1e87e01144ad))
+* **models:** add shared Content interface ([#2695](https://github.com/microsoft/OpenAPI.NET/issues/2695)) ([80e4bbf](https://github.com/microsoft/OpenAPI.NET/commit/80e4bbfa4ab31d3af69fe29751714d001c1f9566))
+* **models:** support mutualTLS security scheme ([f9cf5b8](https://github.com/microsoft/OpenAPI.NET/commit/f9cf5b807d71c49e5bd7e2bec97f12d3b50ca180))
+
## [2.5.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.3...v2.5.0) (2026-01-19)
diff --git a/Directory.Build.props b/Directory.Build.props
index a4b8c77a1..76cd2b183 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 2.5.0
+ 2.6.0
From 110b3b9611dbeb5a241dfcc2be4a7850c3e1bd41 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Thu, 22 Jan 2026 13:37:04 -0500
Subject: [PATCH 050/388] Revert "Merge pull request #2702 from
microsoft/chore/sync-v2"
This reverts commit 615d66109641b72071a014eece52d78ba79a1317, reversing
changes made to 2258501030355fbda99c62df5a8d6a0579906360.
---
CHANGELOG.md | 23 -------------------
.../Models/Interfaces/IOpenApiHeader.cs | 1 +
2 files changed, 1 insertion(+), 23 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4219e0dd4..8855d4438 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -87,29 +87,6 @@
* adds support for OpenAPI 3.2.0 ([765a8dd](https://github.com/microsoft/OpenAPI.NET/commit/765a8dd4d6efd1a31b6a76d282ccffa5877a845a))
-## [2.6.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.5.0...v2.6.0) (2026-01-21)
-
-### Features
-
-* **models:** add shared Content interface ([80e4bbf](https://github.com/microsoft/OpenAPI.NET/commit/80e4bbfa4ab31d3af69fe29751714d001c1f9566))
-* **models:** add shared Content interface ([#2695](https://github.com/microsoft/OpenAPI.NET/issues/2695)) ([338566f](https://github.com/microsoft/OpenAPI.NET/commit/338566fafce04ee1329f4ead61fe1e87e01144ad))
-* **models:** add shared Content interface ([#2695](https://github.com/microsoft/OpenAPI.NET/issues/2695)) ([80e4bbf](https://github.com/microsoft/OpenAPI.NET/commit/80e4bbfa4ab31d3af69fe29751714d001c1f9566))
-* **models:** support mutualTLS security scheme ([f9cf5b8](https://github.com/microsoft/OpenAPI.NET/commit/f9cf5b807d71c49e5bd7e2bec97f12d3b50ca180))
-
-## [2.5.0](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.3...v2.5.0) (2026-01-19)
-
-## Features
-
-* hidi validate command now logs warnings ([1d3d085](https://github.com/microsoft/OpenAPI.NET/commit/1d3d085e0278d9341d7bd10065eba584cb25773c))
-* hidi validate command now logs warnings ([18ed5ac](https://github.com/microsoft/OpenAPI.NET/commit/18ed5acce9661639e1698f19c194e520eb5c93c1))
-
-
-### Bug Fixes
-
-* discriminator property validation fails any/allOf cases when it shouldn't ([ff6e411](https://github.com/microsoft/OpenAPI.NET/commit/ff6e4115dcab8c893bbc6b97639fd620b50f105e))
-* discriminator property validation fails any/allOf cases when it shouldn't ([7def73d](https://github.com/microsoft/OpenAPI.NET/commit/7def73d774d1f0e96118e92b636e52cbea371f2d))
-
-
## [2.4.3](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.2...v2.4.3) (2026-01-16)
## Bug Fixes
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
index 5f65c39b4..8104c72ed 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
@@ -57,4 +57,5 @@ public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// Examples of the media type.
///
public IDictionary? Examples { get; }
+
}
From e4514afcc9baf74df60736bbd59215b611f1c488 Mon Sep 17 00:00:00 2001
From: Vincent Biret
Date: Thu, 22 Jan 2026 13:37:24 -0500
Subject: [PATCH 051/388] Revert "feat(models): add shared Content interface
(#2695)"
This reverts commit 9e13b2574e68387ecc01c453b571208c40124b46.
---
.../Interfaces/IOpenApiContentElement.cs | 27 --------------
.../Models/Interfaces/IOpenApiHeader.cs | 7 +++-
.../Models/Interfaces/IOpenApiParameter.cs | 13 ++++++-
.../Models/Interfaces/IOpenApiRequestBody.cs | 7 +++-
.../Models/Interfaces/IOpenApiResponse.cs | 8 ++++-
src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 7 ++--
.../Models/OpenApiParameter.cs | 21 ++++-------
.../Models/OpenApiRequestBody.cs | 19 +++++-----
.../Models/OpenApiResponse.cs | 6 ++--
.../PublicApi/PublicApi.approved.txt | 36 +++++++++----------
10 files changed, 67 insertions(+), 84 deletions(-)
delete mode 100644 src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
deleted file mode 100644
index 15725d4fc..000000000
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiContentElement.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Collections.Generic;
-
-namespace Microsoft.OpenApi;
-
-///
-/// Describes an element that has content.
-///
-public interface IOpenApiContentElement
-{
- ///
- /// A map containing descriptions of potential payloads.
- /// The key is a media type or media type range and the value describes it.
- ///
- IDictionary? Content { get; set; }
-}
-
-///
-/// Describes an element that has content.
-///
-public interface IOpenApiReadOnlyContentElement
-{
- ///
- /// A map containing descriptions of potential payloads.
- /// The key is a media type or media type range and the value describes it.
- ///
- IDictionary? Content { get; }
-}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
index 8104c72ed..55e484555 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
@@ -8,7 +8,7 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the headers object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
+public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
{
///
/// Determines whether this header is mandatory.
@@ -58,4 +58,9 @@ public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExte
///
public IDictionary? Examples { get; }
+ ///
+ /// A map containing the representations for the header.
+ ///
+ public IDictionary? Content { get; }
+
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
index 405d04fab..5669a0bb3 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
@@ -7,7 +7,7 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the parameter object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
+public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
{
///
/// REQUIRED. The name of the parameter. Parameter names are case sensitive.
@@ -93,4 +93,15 @@ public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyE
/// Assign to use get null as a serialized value.
///
public JsonNode? Example { get; }
+
+ ///
+ /// A map containing the representations for the parameter.
+ /// The key is the media type and the value describes it.
+ /// The map MUST only contain one entry.
+ /// For more complex scenarios, the content property can define the media type and schema of the parameter.
+ /// A parameter MUST contain either a schema property, or a content property, but not both.
+ /// When example or examples are provided in conjunction with the schema object,
+ /// the example MUST follow the prescribed serialization strategy for the parameter.
+ ///
+ public IDictionary? Content { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
index 2e722b0f5..5ab2f7174 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
@@ -6,13 +6,18 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the request body object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiReadOnlyContentElement
+public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable
{
///
/// Determines if the request body is required in the request. Defaults to false.
///
public bool Required { get; }
+ ///
+ /// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
+ /// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
+ ///
+ public IDictionary? Content { get; }
///
/// Converts the request body to a body parameter in preparation for a v2 serialization.
///
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
index 6823868f2..d0423771f 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
@@ -6,13 +6,19 @@ namespace Microsoft.OpenApi;
/// Defines the base properties for the response object.
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
///
-public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiSummarizedElement, IOpenApiReadOnlyContentElement
+public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyExtensible, IShallowCopyable, IOpenApiReferenceable, IOpenApiSummarizedElement
{
///
/// Maps a header name to its definition.
///
public IDictionary? Headers { get; }
+ ///
+ /// A map containing descriptions of potential response payloads.
+ /// The key is a media type or media type range and the value describes it.
+ ///
+ public IDictionary? Content { get; }
+
///
/// A map of operations links that can be followed from the response.
/// The key of the map is a short name for the link,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
index 9ec42aa06..7e5ea273f 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi
/// Header Object.
/// The Header Object follows the structure of the Parameter Object.
///
- public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible, IOpenApiContentElement
+ public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible
{
///
public string? Description { get; set; }
@@ -98,7 +98,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -175,8 +175,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false);
// schema
- var targetSchema = Schema switch
- {
+ var targetSchema = Schema switch {
OpenApiSchemaReference schemaReference => schemaReference.RecursiveTarget,
OpenApiSchema schema => schema,
_ => null,
diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
index 14294cbd8..d6b060a78 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
@@ -11,7 +11,7 @@ namespace Microsoft.OpenApi
///
/// Parameter Object.
///
- public class OpenApiParameter : IOpenApiExtensible, IOpenApiParameter, IOpenApiContentElement
+ public class OpenApiParameter : IOpenApiExtensible, IOpenApiParameter
{
private bool? _explode;
private ParameterStyle? _style;
@@ -60,15 +60,7 @@ public bool Explode
///
public JsonNode? Example { get; set; }
- ///
- /// A map containing the representations for the parameter.
- /// The key is the media type and the value describes it.
- /// The map MUST only contain one entry.
- /// For more complex scenarios, the content property can define the media type and schema of the parameter.
- /// A parameter MUST contain either a schema property, or a content property, but not both.
- /// When example or examples are provided in conjunction with the schema object,
- /// the example MUST follow the prescribed serialization strategy for the parameter.
- ///
+ ///
public IDictionary? Content { get; set; }
///
@@ -119,11 +111,11 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
-
+
// Validate that Cookie style is only used in OpenAPI 3.2 and later
if (Style == ParameterStyle.Cookie && version < OpenApiSpecVersion.OpenApi3_2)
{
@@ -234,8 +226,7 @@ internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Diction
// uniqueItems
// enum
// multipleOf
- var targetSchema = Schema switch
- {
+ var targetSchema = Schema switch {
OpenApiSchemaReference schemaReference => schemaReference.RecursiveTarget,
OpenApiSchema schema => schema,
_ => null,
@@ -280,7 +271,7 @@ internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Diction
public virtual void SerializeAsV2(IOpenApiWriter writer)
{
Utils.CheckArgumentNull(writer);
-
+
// Validate that Cookie style is only used in OpenAPI 3.2 and later
if (Style == ParameterStyle.Cookie)
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
index 225837544..fa29d3ea0 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
@@ -10,7 +10,7 @@ namespace Microsoft.OpenApi
///
/// Request Body Object
///
- public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody, IOpenApiContentElement
+ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody
{
///
public string? Description { get; set; }
@@ -18,10 +18,7 @@ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody, IOpen
///
public bool Required { get; set; }
- ///
- /// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
- /// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
- ///
+ ///
public IDictionary? Content { get; set; }
///
@@ -67,7 +64,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
-
+
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
@@ -113,7 +110,7 @@ public IOpenApiParameter ConvertToBodyParameter(IOpenApiWriter writer)
Extensions = Extensions?.ToDictionary(static k => k.Key, static v => v.Value)
};
// Clone extensions so we can remove the x-bodyName extensions from the output V2 model.
- if (bodyParameter.Extensions is not null &&
+ if (bodyParameter.Extensions is not null &&
bodyParameter.Extensions.TryGetValue(OpenApiConstants.BodyName, out var bodyNameExtension) &&
bodyNameExtension is JsonNodeExtension bodyName)
{
@@ -129,7 +126,7 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
if (Content == null || !Content.Any())
yield break;
var properties = Content.First().Value.Schema?.Properties;
- if (properties != null)
+ if(properties != null)
{
foreach (var property in properties)
{
@@ -147,11 +144,11 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
OpenApiSchemaReference => throw new InvalidOperationException("Unresolved reference target"),
_ => throw new InvalidOperationException("Unexpected schema type")
};
-
+
updatedSchema.Type = "file".ToJsonSchemaType();
updatedSchema.Format = null;
paramSchema = updatedSchema;
-
+
}
yield return new OpenApiFormDataParameter()
{
@@ -162,7 +159,7 @@ public IEnumerable ConvertToFormDataParameters(IOpenApiWriter
Required = Content.First().Value.Schema?.Required?.Contains(property.Key) ?? false
};
}
- }
+ }
}
///
diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
index 6cc0000df..4ee39336e 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
@@ -10,7 +10,7 @@ namespace Microsoft.OpenApi
///
/// Response object.
///
- public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse, IOpenApiContentElement
+ public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse
{
///
public string? Summary { get; set; }
@@ -73,7 +73,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -177,7 +177,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
// so remove it from the cloned collection so we don't write it again.
extensionsClone?.Remove(key);
}
- }
+ }
}
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 5413879c0..59f1bce31 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -109,10 +109,6 @@ namespace Microsoft.OpenApi
{
System.Collections.Generic.Dictionary? PathItems { get; }
}
- public interface IOpenApiContentElement
- {
- System.Collections.Generic.IDictionary? Content { get; set; }
- }
public interface IOpenApiDescribedElement : Microsoft.OpenApi.IOpenApiElement
{
string? Description { get; set; }
@@ -133,10 +129,11 @@ namespace Microsoft.OpenApi
{
void Write(Microsoft.OpenApi.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion);
}
- public interface IOpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
bool AllowEmptyValue { get; }
bool AllowReserved { get; }
+ System.Collections.Generic.IDictionary? Content { get; }
bool Deprecated { get; }
System.Text.Json.Nodes.JsonNode? Example { get; }
System.Collections.Generic.IDictionary? Examples { get; }
@@ -163,10 +160,11 @@ namespace Microsoft.OpenApi
System.Collections.Generic.IList? PrefixEncoding { get; }
Microsoft.OpenApi.IOpenApiSchema? Schema { get; }
}
- public interface IOpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
bool AllowEmptyValue { get; }
bool AllowReserved { get; }
+ System.Collections.Generic.IDictionary? Content { get; }
bool Deprecated { get; }
System.Text.Json.Nodes.JsonNode? Example { get; }
System.Collections.Generic.IDictionary? Examples { get; }
@@ -183,10 +181,6 @@ namespace Microsoft.OpenApi
System.Collections.Generic.IList? Parameters { get; }
System.Collections.Generic.IList? Servers { get; }
}
- public interface IOpenApiReadOnlyContentElement
- {
- System.Collections.Generic.IDictionary? Content { get; }
- }
public interface IOpenApiReadOnlyDescribedElement : Microsoft.OpenApi.IOpenApiElement
{
string? Description { get; }
@@ -220,14 +214,16 @@ namespace Microsoft.OpenApi
U CopyReferenceAsTargetElementWithOverrides(U source);
}
public interface IOpenApiReferenceable : Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiSerializable { }
- public interface IOpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
+ System.Collections.Generic.IDictionary? Content { get; }
bool Required { get; }
Microsoft.OpenApi.IOpenApiParameter? ConvertToBodyParameter(Microsoft.OpenApi.IOpenApiWriter writer);
System.Collections.Generic.IEnumerable? ConvertToFormDataParameters(Microsoft.OpenApi.IOpenApiWriter writer);
}
- public interface IOpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
+ public interface IOpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
{
+ System.Collections.Generic.IDictionary? Content { get; }
System.Collections.Generic.IDictionary? Headers { get; }
System.Collections.Generic.IDictionary? Links { get; }
}
@@ -791,7 +787,7 @@ namespace Microsoft.OpenApi
public static Microsoft.OpenApi.OpenApiUrlTreeNode CreateOpenApiUrlTreeNode(System.Collections.Generic.Dictionary sources) { }
public static System.Func CreatePredicate(string? operationIds = null, string? tags = null, System.Collections.Generic.Dictionary>? requestUrls = null, Microsoft.OpenApi.OpenApiDocument? source = null) { }
}
- public class OpenApiHeader : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiHeader : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiHeader() { }
public bool AllowEmptyValue { get; set; }
@@ -812,7 +808,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiHeaderReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiHeaderReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiHeader, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiHeaderReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public bool AllowEmptyValue { get; }
@@ -1027,7 +1023,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiParameter : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiParameter : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiParameter() { }
public bool AllowEmptyValue { get; set; }
@@ -1050,7 +1046,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiParameterReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiParameterReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiParameter, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiParameterReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public bool AllowEmptyValue { get; }
@@ -1155,7 +1151,7 @@ namespace Microsoft.OpenApi
protected override void SerializeAdditionalV32Properties(Microsoft.OpenApi.IOpenApiWriter writer) { }
protected override void SetAdditional31MetadataFromMapNode(System.Text.Json.Nodes.JsonObject jsonObject) { }
}
- public class OpenApiRequestBody : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiRequestBody : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiRequestBody() { }
public System.Collections.Generic.IDictionary? Content { get; set; }
@@ -1170,7 +1166,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiRequestBodyReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiRequestBodyReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiRequestBody, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiRequestBodyReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public System.Collections.Generic.IDictionary? Content { get; }
@@ -1184,7 +1180,7 @@ namespace Microsoft.OpenApi
public Microsoft.OpenApi.IOpenApiRequestBody CreateShallowCopy() { }
public override void SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiResponse : Microsoft.OpenApi.IOpenApiContentElement, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiResponse : Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiExtensible, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiResponse() { }
public System.Collections.Generic.IDictionary? Content { get; set; }
@@ -1199,7 +1195,7 @@ namespace Microsoft.OpenApi
public virtual void SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter writer) { }
public virtual void SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter writer) { }
}
- public class OpenApiResponseReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyContentElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
+ public class OpenApiResponseReference : Microsoft.OpenApi.BaseOpenApiReferenceHolder, Microsoft.OpenApi.IOpenApiDescribedElement, Microsoft.OpenApi.IOpenApiElement, Microsoft.OpenApi.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.IOpenApiReferenceable, Microsoft.OpenApi.IOpenApiResponse, Microsoft.OpenApi.IOpenApiSerializable, Microsoft.OpenApi.IOpenApiSummarizedElement, Microsoft.OpenApi.IShallowCopyable
{
public OpenApiResponseReference(string referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) { }
public System.Collections.Generic.IDictionary? Content { get; }
From e1b234cfe357e869b4900f8162ce93cb67424b16 Mon Sep 17 00:00:00 2001
From: "release-please-token-provider[bot]"
<225477224+release-please-token-provider[bot]@users.noreply.github.com>
Date: Thu, 22 Jan 2026 18:53:14 +0000
Subject: [PATCH 052/388] chore(main): release 3.3.1
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 12 ++++++++++++
Directory.Build.props | 2 +-
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index ff1c7af58..0befe35d6 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "3.3.0"
+ ".": "3.3.1"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8855d4438..3d8605bbf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## [3.3.1](https://github.com/microsoft/OpenAPI.NET/compare/v3.3.0...v3.3.1) (2026-01-22)
+
+
+### Features
+
+* **models:** add shared Content interface ([#2695](https://github.com/microsoft/OpenAPI.NET/issues/2695)) ([338566f](https://github.com/microsoft/OpenAPI.NET/commit/338566fafce04ee1329f4ead61fe1e87e01144ad))
+
+
+### Bug Fixes
+
+* broken binary compatibility due to interface changes in previous version ([d96bba7](https://github.com/microsoft/OpenAPI.NET/commit/d96bba72c383cd5db2b7032530aee3b4d944ebc6))
+
## [3.3.0](https://github.com/microsoft/OpenAPI.NET/compare/v3.2.0...v3.3.0) (2026-01-21)
diff --git a/Directory.Build.props b/Directory.Build.props
index 36284217c..13c72dd49 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,7 +12,7 @@
https://github.com/Microsoft/OpenAPI.NET
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
- 3.3.0
+ 3.3.1
From 0156943368877e5f6bd6ea8c0a2a169ebe0d6e6c Mon Sep 17 00:00:00 2001
From: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Tue, 27 Jan 2026 14:21:47 -0600
Subject: [PATCH 053/388] ci: switches to public API analyzer
* Initial plan
* Convert PublicApi.approved.txt to PublicApiAnalyzers format
- Converted test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt (2152 lines)
to src/Microsoft.OpenApi/PublicAPI.Shipped.txt (1844 entries)
- Generated PublicAPI.Shipped.txt and PublicAPI.Unshipped.txt files for both
Microsoft.OpenApi and Microsoft.OpenApi.YamlReader projects
- Added Microsoft.CodeAnalysis.PublicApiAnalyzers package reference in Directory.Build.props
The conversion extracted 1843 public API declarations from the PublicApiGenerator
format and converted them to the Microsoft.CodeAnalysis.PublicApiAnalyzers format:
- Types (classes, interfaces, structs, enums, delegates)
- Constructors
- Methods
- Properties (with get/set accessors)
- Fields (including const fields)
- Events
- Enum values with their numeric assignments
Note: Build validation and potential missing API entries will need to be addressed
in follow-up work as the PublicApiAnalyzers may identify additional public APIs
not captured in the original PublicApiGenerator output.
* Populate PublicAPI.Shipped.txt for Microsoft.OpenApi project
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
* Remove backup files
* Fix PublicAPI.Unshipped.txt for Microsoft.OpenApi.YamlReader
- Generated public API using PublicApiGenerator for Microsoft.OpenApi.YamlReader assembly
- Converted to PublicApiAnalyzers format and added to PublicAPI.Unshipped.txt
- Made static ReadFragment(JsonNode...) method internal to resolve RS0016 and RS0026 analyzer errors
- Resolved RS0016/RS0017 analyzer errors for YamlReader project
- Note: RS0036 nullability annotation warnings remain but are separate from PublicAPI format issues
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
* chore: removes old unit test based public API validation
Signed-off-by: Vincent Biret
* chore: reverts copilot hallucination
Signed-off-by: Vincent Biret
* chore: moves the analyzer to library projects only
* chore: refreshes API export
Signed-off-by: Vincent Biret
---------
Signed-off-by: Vincent Biret
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
Co-authored-by: Vincent Biret
---
.../Microsoft.OpenApi.YamlReader.csproj | 5 +
.../PublicAPI.Shipped.txt | 17 +
.../PublicAPI.Unshipped.txt | 1 +
.../Microsoft.OpenApi.csproj | 4 +
src/Microsoft.OpenApi/PublicAPI.Shipped.txt | 2023 ++++++++++++++++
src/Microsoft.OpenApi/PublicAPI.Unshipped.txt | 1 +
.../Microsoft.OpenApi.Tests.csproj | 1 -
.../PublicApi/PublicApi.approved.txt | 2153 -----------------
.../PublicApi/PublicApiTests.cs | 56 -
9 files changed, 2051 insertions(+), 2210 deletions(-)
create mode 100644 src/Microsoft.OpenApi.YamlReader/PublicAPI.Shipped.txt
create mode 100644 src/Microsoft.OpenApi.YamlReader/PublicAPI.Unshipped.txt
create mode 100644 src/Microsoft.OpenApi/PublicAPI.Shipped.txt
create mode 100644 src/Microsoft.OpenApi/PublicAPI.Unshipped.txt
delete mode 100644 test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
delete mode 100755 test/Microsoft.OpenApi.Tests/PublicApi/PublicApiTests.cs
diff --git a/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj b/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj
index 1f2f5fb36..c4961cb10 100644
--- a/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj
+++ b/src/Microsoft.OpenApi.YamlReader/Microsoft.OpenApi.YamlReader.csproj
@@ -28,6 +28,11 @@
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/src/Microsoft.OpenApi.YamlReader/PublicAPI.Shipped.txt b/src/Microsoft.OpenApi.YamlReader/PublicAPI.Shipped.txt
new file mode 100644
index 000000000..7ea43f370
--- /dev/null
+++ b/src/Microsoft.OpenApi.YamlReader/PublicAPI.Shipped.txt
@@ -0,0 +1,17 @@
+#nullable enable
+Microsoft.OpenApi.Reader.OpenApiReaderSettingsExtensions
+Microsoft.OpenApi.YamlReader.OpenApiYamlReader
+Microsoft.OpenApi.YamlReader.OpenApiYamlReader.OpenApiYamlReader() -> void
+Microsoft.OpenApi.YamlReader.OpenApiYamlReader.Read(System.IO.MemoryStream! input, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings) -> Microsoft.OpenApi.Reader.ReadResult!
+Microsoft.OpenApi.YamlReader.OpenApiYamlReader.ReadAsync(System.IO.Stream! input, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.YamlReader.OpenApiYamlReader.ReadFragment(System.IO.MemoryStream! input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.OpenApiDocument! openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) -> T?
+Microsoft.OpenApi.YamlReader.YamlConverter
+static Microsoft.OpenApi.Reader.OpenApiReaderSettingsExtensions.AddYamlReader(this Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings) -> void
+static Microsoft.OpenApi.YamlReader.OpenApiYamlReader.Read(System.Text.Json.Nodes.JsonNode! jsonNode, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings) -> Microsoft.OpenApi.Reader.ReadResult!
+static Microsoft.OpenApi.YamlReader.OpenApiYamlReader.ReadFragment(System.Text.Json.Nodes.JsonNode! input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.OpenApiDocument! openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) -> T?
+static Microsoft.OpenApi.YamlReader.YamlConverter.ToJsonArray(this SharpYaml.Serialization.YamlSequenceNode! yaml) -> System.Text.Json.Nodes.JsonArray!
+static Microsoft.OpenApi.YamlReader.YamlConverter.ToJsonNode(this SharpYaml.Serialization.YamlDocument! yaml) -> System.Text.Json.Nodes.JsonNode!
+static Microsoft.OpenApi.YamlReader.YamlConverter.ToJsonNode(this SharpYaml.Serialization.YamlNode! yaml) -> System.Text.Json.Nodes.JsonNode!
+static Microsoft.OpenApi.YamlReader.YamlConverter.ToJsonNode(this SharpYaml.Serialization.YamlStream! yaml) -> System.Collections.Generic.IEnumerable!
+static Microsoft.OpenApi.YamlReader.YamlConverter.ToJsonObject(this SharpYaml.Serialization.YamlMappingNode! yaml) -> System.Text.Json.Nodes.JsonObject!
+static Microsoft.OpenApi.YamlReader.YamlConverter.ToYamlNode(this System.Text.Json.Nodes.JsonNode! json) -> SharpYaml.Serialization.YamlNode!
diff --git a/src/Microsoft.OpenApi.YamlReader/PublicAPI.Unshipped.txt b/src/Microsoft.OpenApi.YamlReader/PublicAPI.Unshipped.txt
new file mode 100644
index 000000000..7dc5c5811
--- /dev/null
+++ b/src/Microsoft.OpenApi.YamlReader/PublicAPI.Unshipped.txt
@@ -0,0 +1 @@
+#nullable enable
diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
index dad533668..a6ea923a6 100644
--- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
+++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
@@ -24,6 +24,10 @@
true
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
diff --git a/src/Microsoft.OpenApi/PublicAPI.Shipped.txt b/src/Microsoft.OpenApi/PublicAPI.Shipped.txt
new file mode 100644
index 000000000..6658135b1
--- /dev/null
+++ b/src/Microsoft.OpenApi/PublicAPI.Shipped.txt
@@ -0,0 +1,2023 @@
+#nullable enable
+abstract Microsoft.OpenApi.BaseOpenApiReferenceHolder.CopyReference(V! sourceReference) -> V!
+abstract Microsoft.OpenApi.BaseOpenApiReferenceHolder.CopyReferenceAsTargetElementWithOverrides(U source) -> U
+abstract Microsoft.OpenApi.OpenApiWriterBase.BaseIndentation.get -> int
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteEndArray() -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteEndObject() -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteNull() -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WritePropertyName(string! name) -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteRaw(string! value) -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteStartArray() -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteStartObject() -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteValue(string! value) -> void
+abstract Microsoft.OpenApi.OpenApiWriterBase.WriteValueSeparator() -> void
+abstract Microsoft.OpenApi.RuntimeExpression.Expression.get -> string!
+const Microsoft.OpenApi.BodyExpression.Body = "body" -> string!
+const Microsoft.OpenApi.BodyExpression.PointerPrefix = "#" -> string!
+const Microsoft.OpenApi.HeaderExpression.Header = "header." -> string!
+const Microsoft.OpenApi.MethodExpression.Method = "$method" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AccessCode = "accessCode" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AdditionalOperations = "additionalOperations" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AdditionalProperties = "additionalProperties" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AllOf = "allOf" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AllowEmptyValue = "allowEmptyValue" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AllowReserved = "allowReserved" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AnyOf = "anyOf" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Application = "application" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Attribute = "attribute" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AuthorizationCode = "authorizationCode" -> string!
+const Microsoft.OpenApi.OpenApiConstants.AuthorizationUrl = "authorizationUrl" -> string!
+const Microsoft.OpenApi.OpenApiConstants.BasePath = "basePath" -> string!
+const Microsoft.OpenApi.OpenApiConstants.BaseRegistryUri = "https://openapi.net/" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Basic = "basic" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Bearer = "bearer" -> string!
+const Microsoft.OpenApi.OpenApiConstants.BearerFormat = "bearerFormat" -> string!
+const Microsoft.OpenApi.OpenApiConstants.BodyName = "x-bodyName" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Callbacks = "callbacks" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ClientCredentials = "clientCredentials" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Comment = "$comment" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Components = "components" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ComponentsSegment = "/components/" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Const = "const" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Consumes = "consumes" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Contact = "contact" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Content = "content" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ContentType = "contentType" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DataValue = "dataValue" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Default = "default" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DefaultDefault = "Default Default" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DefaultDescription = "Default Description" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DefaultName = "Default Name" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DefaultTitle = "Default Title" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Definitions = "definitions" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Defs = "$defs" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Delete = "delete" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DependentRequired = "dependentRequired" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Deprecated = "deprecated" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Description = "description" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DeviceAuthorization = "deviceAuthorization" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DeviceAuthorizationUrl = "deviceAuthorizationUrl" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Discriminator = "discriminator" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DollarRef = "$ref" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DollarSchema = "$schema" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DynamicAnchor = "$dynamicAnchor" -> string!
+const Microsoft.OpenApi.OpenApiConstants.DynamicRef = "$dynamicRef" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Email = "email" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Encoding = "encoding" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Enum = "enum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Example = "example" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Examples = "examples" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ExamplesExtension = "x-examples" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ExclusiveMaximum = "exclusiveMaximum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ExclusiveMinimum = "exclusiveMinimum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Explode = "explode" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ExtensionFieldNamePrefix = "x-" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ExternalDocs = "externalDocs" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ExternalValue = "externalValue" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Flow = "flow" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Flows = "flows" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Format = "format" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Get = "get" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Head = "head" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Headers = "headers" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Host = "host" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Id = "$id" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Identifier = "identifier" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Implicit = "implicit" -> string!
+const Microsoft.OpenApi.OpenApiConstants.In = "in" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Info = "info" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ItemEncoding = "itemEncoding" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Items = "items" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ItemSchema = "itemSchema" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Json = "json" -> string!
+const Microsoft.OpenApi.OpenApiConstants.JsonSchemaDialect = "jsonSchemaDialect" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Jwt = "JWT" -> string!
+const Microsoft.OpenApi.OpenApiConstants.License = "license" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Links = "links" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Mapping = "mapping" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Maximum = "maximum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MaxItems = "maxItems" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MaxLength = "maxLength" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MaxProperties = "maxProperties" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MediaTypes = "mediaTypes" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Minimum = "minimum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MinItems = "minItems" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MinLength = "minLength" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MinProperties = "minProperties" -> string!
+const Microsoft.OpenApi.OpenApiConstants.MultipleOf = "multipleOf" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Name = "name" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Namespace = "namespace" -> string!
+const Microsoft.OpenApi.OpenApiConstants.NodeType = "nodeType" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Not = "not" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Null = "null" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Nullable = "nullable" -> string!
+const Microsoft.OpenApi.OpenApiConstants.NullableExtension = "x-nullable" -> string!
+const Microsoft.OpenApi.OpenApiConstants.OneOf = "oneOf" -> string!
+const Microsoft.OpenApi.OpenApiConstants.OpenApi = "openapi" -> string!
+const Microsoft.OpenApi.OpenApiConstants.OpenIdConnectUrl = "openIdConnectUrl" -> string!
+const Microsoft.OpenApi.OpenApiConstants.OperationId = "operationId" -> string!
+const Microsoft.OpenApi.OpenApiConstants.OperationRef = "operationRef" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Options = "options" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Parameters = "parameters" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Password = "password" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Patch = "patch" -> string!
+const Microsoft.OpenApi.OpenApiConstants.PathItems = "pathItems" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Paths = "paths" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Pattern = "pattern" -> string!
+const Microsoft.OpenApi.OpenApiConstants.PatternProperties = "patternProperties" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Post = "post" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Prefix = "prefix" -> string!
+const Microsoft.OpenApi.OpenApiConstants.PrefixEncoding = "prefixEncoding" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Produces = "produces" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Properties = "properties" -> string!
+const Microsoft.OpenApi.OpenApiConstants.PropertyName = "propertyName" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Put = "put" -> string!
+const Microsoft.OpenApi.OpenApiConstants.ReadOnly = "readOnly" -> string!
+const Microsoft.OpenApi.OpenApiConstants.RecursiveAnchor = "$recursiveAnchor" -> string!
+const Microsoft.OpenApi.OpenApiConstants.RecursiveRef = "$recursiveRef" -> string!
+const Microsoft.OpenApi.OpenApiConstants.RefreshUrl = "refreshUrl" -> string!
+const Microsoft.OpenApi.OpenApiConstants.RequestBodies = "requestBodies" -> string!
+const Microsoft.OpenApi.OpenApiConstants.RequestBody = "requestBody" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Required = "required" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Responses = "responses" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Schema = "schema" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Schemas = "schemas" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Scheme = "scheme" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Schemes = "schemes" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Scopes = "scopes" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Security = "security" -> string!
+const Microsoft.OpenApi.OpenApiConstants.SecurityDefinitions = "securityDefinitions" -> string!
+const Microsoft.OpenApi.OpenApiConstants.SecuritySchemes = "securitySchemes" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Self = "$self" -> string!
+const Microsoft.OpenApi.OpenApiConstants.SerializedValue = "serializedValue" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Server = "server" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Servers = "servers" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Style = "style" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Summary = "summary" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Swagger = "swagger" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Tags = "tags" -> string!
+const Microsoft.OpenApi.OpenApiConstants.TermsOfService = "termsOfService" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Title = "title" -> string!
+const Microsoft.OpenApi.OpenApiConstants.TokenUrl = "tokenUrl" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Trace = "trace" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Type = "type" -> string!
+const Microsoft.OpenApi.OpenApiConstants.UnevaluatedProperties = "unevaluatedProperties" -> string!
+const Microsoft.OpenApi.OpenApiConstants.UniqueItems = "uniqueItems" -> string!
+const Microsoft.OpenApi.OpenApiConstants.UnrecognizedKeywords = "unrecognizedKeywords" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Url = "url" -> string!
+const Microsoft.OpenApi.OpenApiConstants.V2ReferenceUri = "https://registry/definitions/" -> string!
+const Microsoft.OpenApi.OpenApiConstants.V31ExclusiveMaximum = "exclusiveMaximum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.V31ExclusiveMinimum = "exclusiveMinimum" -> string!
+const Microsoft.OpenApi.OpenApiConstants.V3ReferenceUri = "https://registry/components/schemas/" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Value = "value" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Variables = "variables" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Version = "version" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Vocabulary = "$vocabulary" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Webhooks = "webhooks" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Wrapped = "wrapped" -> string!
+const Microsoft.OpenApi.OpenApiConstants.WriteOnly = "writeOnly" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Xml = "xml" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Yaml = "yaml" -> string!
+const Microsoft.OpenApi.OpenApiConstants.Yml = "yml" -> string!
+const Microsoft.OpenApi.OpenApiWriterBase.IndentationString = " " -> string!
+const Microsoft.OpenApi.PathExpression.Path = "path." -> string!
+const Microsoft.OpenApi.QueryExpression.Query = "query." -> string!
+const Microsoft.OpenApi.RequestExpression.Request = "$request." -> string!
+const Microsoft.OpenApi.ResponseExpression.Response = "$response." -> string!
+const Microsoft.OpenApi.RuntimeExpression.Prefix = "$" -> string!
+const Microsoft.OpenApi.StatusCodeExpression.StatusCode = "$statusCode" -> string!
+const Microsoft.OpenApi.UrlExpression.Url = "$url" -> string!
+Microsoft.OpenApi.BaseOpenApiReference
+Microsoft.OpenApi.BaseOpenApiReference.BaseOpenApiReference() -> void
+Microsoft.OpenApi.BaseOpenApiReference.BaseOpenApiReference(Microsoft.OpenApi.BaseOpenApiReference! reference) -> void
+Microsoft.OpenApi.BaseOpenApiReference.ExternalResource.get -> string?
+Microsoft.OpenApi.BaseOpenApiReference.ExternalResource.init -> void
+Microsoft.OpenApi.BaseOpenApiReference.HostDocument.get -> Microsoft.OpenApi.OpenApiDocument?
+Microsoft.OpenApi.BaseOpenApiReference.HostDocument.init -> void
+Microsoft.OpenApi.BaseOpenApiReference.Id.get -> string?
+Microsoft.OpenApi.BaseOpenApiReference.Id.init -> void
+Microsoft.OpenApi.BaseOpenApiReference.IsExternal.get -> bool
+Microsoft.OpenApi.BaseOpenApiReference.IsFragment.get -> bool
+Microsoft.OpenApi.BaseOpenApiReference.IsFragment.init -> void
+Microsoft.OpenApi.BaseOpenApiReference.IsLocal.get -> bool
+Microsoft.OpenApi.BaseOpenApiReference.ReferenceV2.get -> string?
+Microsoft.OpenApi.BaseOpenApiReference.ReferenceV3.get -> string?
+Microsoft.OpenApi.BaseOpenApiReference.Type.get -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.BaseOpenApiReference.Type.init -> void
+Microsoft.OpenApi.BaseOpenApiReferenceHolder
+Microsoft.OpenApi.BaseOpenApiReferenceHolder.BaseOpenApiReferenceHolder(Microsoft.OpenApi.BaseOpenApiReferenceHolder! source) -> void
+Microsoft.OpenApi.BaseOpenApiReferenceHolder.BaseOpenApiReferenceHolder(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument, Microsoft.OpenApi.ReferenceType referenceType, string? externalResource) -> void
+Microsoft.OpenApi.BaseOpenApiReferenceHolder.RecursiveTarget.get -> T?
+Microsoft.OpenApi.BaseOpenApiReferenceHolder.Reference.get -> V!
+Microsoft.OpenApi.BaseOpenApiReferenceHolder.Reference.init -> void
+Microsoft.OpenApi.BaseOpenApiReferenceHolder.UnresolvedReference.get -> bool
+Microsoft.OpenApi.BodyExpression
+Microsoft.OpenApi.BodyExpression.BodyExpression() -> void
+Microsoft.OpenApi.BodyExpression.BodyExpression(Microsoft.OpenApi.JsonPointer? pointer) -> void
+Microsoft.OpenApi.BodyExpression.Fragment.get -> string?
+Microsoft.OpenApi.CompositeExpression
+Microsoft.OpenApi.CompositeExpression.CompositeExpression(string! expression) -> void
+Microsoft.OpenApi.CompositeExpression.ContainedExpressions.get -> System.Collections.Generic.List!
+Microsoft.OpenApi.CurrentKeys
+Microsoft.OpenApi.CurrentKeys.Callback.get -> string?
+Microsoft.OpenApi.CurrentKeys.Content.get -> string?
+Microsoft.OpenApi.CurrentKeys.CurrentKeys() -> void
+Microsoft.OpenApi.CurrentKeys.Encoding.get -> string?
+Microsoft.OpenApi.CurrentKeys.Example.get -> string?
+Microsoft.OpenApi.CurrentKeys.Extension.get -> string?
+Microsoft.OpenApi.CurrentKeys.Header.get -> string?
+Microsoft.OpenApi.CurrentKeys.Link.get -> string?
+Microsoft.OpenApi.CurrentKeys.Operation.get -> System.Net.Http.HttpMethod?
+Microsoft.OpenApi.CurrentKeys.Path.get -> string?
+Microsoft.OpenApi.CurrentKeys.Response.get -> string?
+Microsoft.OpenApi.CurrentKeys.ServerVariable.get -> string?
+Microsoft.OpenApi.DisplayAttribute
+Microsoft.OpenApi.DisplayAttribute.DisplayAttribute(string! name) -> void
+Microsoft.OpenApi.DisplayAttribute.Name.get -> string!
+Microsoft.OpenApi.EnumExtensions
+Microsoft.OpenApi.FormattingStreamWriter
+Microsoft.OpenApi.FormattingStreamWriter.FormattingStreamWriter(System.IO.Stream! stream, System.IFormatProvider! formatProvider) -> void
+Microsoft.OpenApi.HeaderExpression
+Microsoft.OpenApi.HeaderExpression.HeaderExpression(string! token) -> void
+Microsoft.OpenApi.HeaderExpression.Token.get -> string?
+Microsoft.OpenApi.IMetadataContainer
+Microsoft.OpenApi.IMetadataContainer.Metadata.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IMetadataContainer.Metadata.set -> void
+Microsoft.OpenApi.IOpenApiCallback
+Microsoft.OpenApi.IOpenApiCallback.PathItems.get -> System.Collections.Generic.Dictionary?
+Microsoft.OpenApi.IOpenApiDescribedElement
+Microsoft.OpenApi.IOpenApiDescribedElement.Description.get -> string?
+Microsoft.OpenApi.IOpenApiDescribedElement.Description.set -> void
+Microsoft.OpenApi.IOpenApiElement
+Microsoft.OpenApi.IOpenApiExample
+Microsoft.OpenApi.IOpenApiExample.DataValue.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiExample.ExternalValue.get -> string?
+Microsoft.OpenApi.IOpenApiExample.SerializedValue.get -> string?
+Microsoft.OpenApi.IOpenApiExample.Value.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiExtensible
+Microsoft.OpenApi.IOpenApiExtensible.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiExtensible.Extensions.set -> void
+Microsoft.OpenApi.IOpenApiExtension
+Microsoft.OpenApi.IOpenApiExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.IOpenApiHeader
+Microsoft.OpenApi.IOpenApiHeader.AllowEmptyValue.get -> bool
+Microsoft.OpenApi.IOpenApiHeader.AllowReserved.get -> bool
+Microsoft.OpenApi.IOpenApiHeader.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiHeader.Deprecated.get -> bool
+Microsoft.OpenApi.IOpenApiHeader.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiHeader.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiHeader.Explode.get -> bool
+Microsoft.OpenApi.IOpenApiHeader.Required.get -> bool
+Microsoft.OpenApi.IOpenApiHeader.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiHeader.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.IOpenApiLink
+Microsoft.OpenApi.IOpenApiLink.OperationId.get -> string?
+Microsoft.OpenApi.IOpenApiLink.OperationRef.get -> string?
+Microsoft.OpenApi.IOpenApiLink.Parameters.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiLink.RequestBody.get -> Microsoft.OpenApi.RuntimeExpressionAnyWrapper?
+Microsoft.OpenApi.IOpenApiLink.Server.get -> Microsoft.OpenApi.OpenApiServer?
+Microsoft.OpenApi.IOpenApiMediaType
+Microsoft.OpenApi.IOpenApiMediaType.Encoding.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiMediaType.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiMediaType.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiMediaType.ItemEncoding.get -> Microsoft.OpenApi.OpenApiEncoding?
+Microsoft.OpenApi.IOpenApiMediaType.ItemSchema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiMediaType.PrefixEncoding.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiMediaType.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiParameter
+Microsoft.OpenApi.IOpenApiParameter.AllowEmptyValue.get -> bool
+Microsoft.OpenApi.IOpenApiParameter.AllowReserved.get -> bool
+Microsoft.OpenApi.IOpenApiParameter.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiParameter.Deprecated.get -> bool
+Microsoft.OpenApi.IOpenApiParameter.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiParameter.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiParameter.Explode.get -> bool
+Microsoft.OpenApi.IOpenApiParameter.In.get -> Microsoft.OpenApi.ParameterLocation?
+Microsoft.OpenApi.IOpenApiParameter.Name.get -> string?
+Microsoft.OpenApi.IOpenApiParameter.Required.get -> bool
+Microsoft.OpenApi.IOpenApiParameter.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiParameter.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.IOpenApiPathItem
+Microsoft.OpenApi.IOpenApiPathItem.Operations.get -> System.Collections.Generic.Dictionary?
+Microsoft.OpenApi.IOpenApiPathItem.Parameters.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiPathItem.Servers.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiReader
+Microsoft.OpenApi.IOpenApiReader.Read(System.IO.MemoryStream! input, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings) -> Microsoft.OpenApi.Reader.ReadResult!
+Microsoft.OpenApi.IOpenApiReader.ReadAsync(System.IO.Stream! input, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.IOpenApiReader.ReadFragment(System.IO.MemoryStream! input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.OpenApiDocument! openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) -> T?
+Microsoft.OpenApi.IOpenApiReadOnlyDescribedElement
+Microsoft.OpenApi.IOpenApiReadOnlyDescribedElement.Description.get -> string?
+Microsoft.OpenApi.IOpenApiReadOnlyExtensible
+Microsoft.OpenApi.IOpenApiReadOnlyExtensible.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiReferenceable
+Microsoft.OpenApi.IOpenApiReferenceHolder
+Microsoft.OpenApi.IOpenApiReferenceHolder.UnresolvedReference.get -> bool
+Microsoft.OpenApi.IOpenApiReferenceHolder
+Microsoft.OpenApi.IOpenApiReferenceHolder.CopyReferenceAsTargetElementWithOverrides(U source) -> U
+Microsoft.OpenApi.IOpenApiReferenceHolder.RecursiveTarget.get -> T?
+Microsoft.OpenApi.IOpenApiReferenceHolder.Target.get -> U?
+Microsoft.OpenApi.IOpenApiReferenceHolder
+Microsoft.OpenApi.IOpenApiReferenceHolder.Reference.get -> V!
+Microsoft.OpenApi.IOpenApiReferenceHolder.Reference.init -> void
+Microsoft.OpenApi.IOpenApiRequestBody
+Microsoft.OpenApi.IOpenApiRequestBody.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiRequestBody.ConvertToBodyParameter(Microsoft.OpenApi.IOpenApiWriter! writer) -> Microsoft.OpenApi.IOpenApiParameter?
+Microsoft.OpenApi.IOpenApiRequestBody.ConvertToFormDataParameters(Microsoft.OpenApi.IOpenApiWriter! writer) -> System.Collections.Generic.IEnumerable?
+Microsoft.OpenApi.IOpenApiRequestBody.Required.get -> bool
+Microsoft.OpenApi.IOpenApiResponse
+Microsoft.OpenApi.IOpenApiResponse.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiResponse.Headers.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiResponse.Links.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiSchema
+Microsoft.OpenApi.IOpenApiSchema.AdditionalProperties.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiSchema.AdditionalPropertiesAllowed.get -> bool
+Microsoft.OpenApi.IOpenApiSchema.AllOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiSchema.AnyOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiSchema.Comment.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.Const.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.Default.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiSchema.Definitions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiSchema.DependentRequired.get -> System.Collections.Generic.IDictionary!>?
+Microsoft.OpenApi.IOpenApiSchema.Deprecated.get -> bool
+Microsoft.OpenApi.IOpenApiSchema.Discriminator.get -> Microsoft.OpenApi.OpenApiDiscriminator?
+Microsoft.OpenApi.IOpenApiSchema.DynamicAnchor.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.DynamicRef.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.Enum.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiSchema.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.IOpenApiSchema.Examples.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiSchema.ExclusiveMaximum.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.ExclusiveMinimum.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.IOpenApiSchema.Format.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.Id.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.Items.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiSchema.Maximum.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.MaxItems.get -> int?
+Microsoft.OpenApi.IOpenApiSchema.MaxLength.get -> int?
+Microsoft.OpenApi.IOpenApiSchema.MaxProperties.get -> int?
+Microsoft.OpenApi.IOpenApiSchema.Minimum.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.MinItems.get -> int?
+Microsoft.OpenApi.IOpenApiSchema.MinLength.get -> int?
+Microsoft.OpenApi.IOpenApiSchema.MinProperties.get -> int?
+Microsoft.OpenApi.IOpenApiSchema.MultipleOf.get -> decimal?
+Microsoft.OpenApi.IOpenApiSchema.Not.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.IOpenApiSchema.OneOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.IOpenApiSchema.Pattern.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.PatternProperties.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiSchema.Properties.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiSchema.ReadOnly.get -> bool
+Microsoft.OpenApi.IOpenApiSchema.Required.get -> System.Collections.Generic.ISet?
+Microsoft.OpenApi.IOpenApiSchema.Schema.get -> System.Uri?
+Microsoft.OpenApi.IOpenApiSchema.Title.get -> string?
+Microsoft.OpenApi.IOpenApiSchema.Type.get -> Microsoft.OpenApi.JsonSchemaType?
+Microsoft.OpenApi.IOpenApiSchema.UnevaluatedProperties.get -> bool
+Microsoft.OpenApi.IOpenApiSchema.UniqueItems.get -> bool?
+Microsoft.OpenApi.IOpenApiSchema.UnrecognizedKeywords.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiSchema.Vocabulary.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.IOpenApiSchema.WriteOnly.get -> bool
+Microsoft.OpenApi.IOpenApiSchema.Xml.get -> Microsoft.OpenApi.OpenApiXml?
+Microsoft.OpenApi.IOpenApiSecurityScheme
+Microsoft.OpenApi.IOpenApiSecurityScheme.BearerFormat.get -> string?
+Microsoft.OpenApi.IOpenApiSecurityScheme.Deprecated.get -> bool
+Microsoft.OpenApi.IOpenApiSecurityScheme.Flows.get -> Microsoft.OpenApi.OpenApiOAuthFlows?
+Microsoft.OpenApi.IOpenApiSecurityScheme.In.get -> Microsoft.OpenApi.ParameterLocation?
+Microsoft.OpenApi.IOpenApiSecurityScheme.Name.get -> string?
+Microsoft.OpenApi.IOpenApiSecurityScheme.OpenIdConnectUrl.get -> System.Uri?
+Microsoft.OpenApi.IOpenApiSecurityScheme.Scheme.get -> string?
+Microsoft.OpenApi.IOpenApiSecurityScheme.Type.get -> Microsoft.OpenApi.SecuritySchemeType?
+Microsoft.OpenApi.IOpenApiSerializable
+Microsoft.OpenApi.IOpenApiSerializable.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.IOpenApiSerializable.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.IOpenApiSerializable.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.IOpenApiSerializable.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.IOpenApiSummarizedElement
+Microsoft.OpenApi.IOpenApiSummarizedElement.Summary.get -> string?
+Microsoft.OpenApi.IOpenApiSummarizedElement.Summary.set -> void
+Microsoft.OpenApi.IOpenApiTag
+Microsoft.OpenApi.IOpenApiTag.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.IOpenApiTag.Kind.get -> string?
+Microsoft.OpenApi.IOpenApiTag.Name.get -> string?
+Microsoft.OpenApi.IOpenApiTag.Parent.get -> Microsoft.OpenApi.OpenApiTagReference?
+Microsoft.OpenApi.IOpenApiTag.Summary.get -> string?
+Microsoft.OpenApi.IOpenApiWriter
+Microsoft.OpenApi.IOpenApiWriter.FlushAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.IOpenApiWriter.WriteEndArray() -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteEndObject() -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteNull() -> void
+Microsoft.OpenApi.IOpenApiWriter.WritePropertyName(string! name) -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteRaw(string! value) -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteStartArray() -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteStartObject() -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteValue(bool value) -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteValue(decimal value) -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteValue(int value) -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteValue(object! value) -> void
+Microsoft.OpenApi.IOpenApiWriter.WriteValue(string! value) -> void
+Microsoft.OpenApi.IShallowCopyable
+Microsoft.OpenApi.IShallowCopyable.CreateShallowCopy() -> T
+Microsoft.OpenApi.IStreamLoader
+Microsoft.OpenApi.IStreamLoader.LoadAsync(System.Uri! baseUrl, System.Uri! uri, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.IValidationContext
+Microsoft.OpenApi.IValidationContext.AddError(Microsoft.OpenApi.OpenApiValidatorError! error) -> void
+Microsoft.OpenApi.IValidationContext.AddWarning(Microsoft.OpenApi.OpenApiValidatorWarning! warning) -> void
+Microsoft.OpenApi.IValidationContext.Enter(string! segment) -> void
+Microsoft.OpenApi.IValidationContext.Exit() -> void
+Microsoft.OpenApi.IValidationContext.PathString.get -> string!
+Microsoft.OpenApi.JsonNodeExtension
+Microsoft.OpenApi.JsonNodeExtension.JsonNodeExtension(System.Text.Json.Nodes.JsonNode! jsonNode) -> void
+Microsoft.OpenApi.JsonNodeExtension.Node.get -> System.Text.Json.Nodes.JsonNode!
+Microsoft.OpenApi.JsonNodeExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.JsonNullSentinel
+Microsoft.OpenApi.JsonPointer
+Microsoft.OpenApi.JsonPointer.JsonPointer(string! pointer) -> void
+Microsoft.OpenApi.JsonPointer.ParentPointer.get -> Microsoft.OpenApi.JsonPointer?
+Microsoft.OpenApi.JsonPointer.Tokens.get -> string![]!
+Microsoft.OpenApi.JsonSchemaReference
+Microsoft.OpenApi.JsonSchemaReference.Default.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.JsonSchemaReference.Default.set -> void
+Microsoft.OpenApi.JsonSchemaReference.Deprecated.get -> bool?
+Microsoft.OpenApi.JsonSchemaReference.Deprecated.set -> void
+Microsoft.OpenApi.JsonSchemaReference.Examples.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.JsonSchemaReference.Examples.set -> void
+Microsoft.OpenApi.JsonSchemaReference.JsonSchemaReference() -> void
+Microsoft.OpenApi.JsonSchemaReference.JsonSchemaReference(Microsoft.OpenApi.JsonSchemaReference! reference) -> void
+Microsoft.OpenApi.JsonSchemaReference.ReadOnly.get -> bool?
+Microsoft.OpenApi.JsonSchemaReference.ReadOnly.set -> void
+Microsoft.OpenApi.JsonSchemaReference.Title.get -> string?
+Microsoft.OpenApi.JsonSchemaReference.Title.set -> void
+Microsoft.OpenApi.JsonSchemaReference.WriteOnly.get -> bool?
+Microsoft.OpenApi.JsonSchemaReference.WriteOnly.set -> void
+Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.Array = 64 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.Boolean = 2 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.Integer = 4 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.Null = 1 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.Number = 8 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.Object = 32 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.JsonSchemaType.String = 16 -> Microsoft.OpenApi.JsonSchemaType
+Microsoft.OpenApi.MethodExpression
+Microsoft.OpenApi.MethodExpression.MethodExpression() -> void
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.Description.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.Description.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.EnumDescription() -> void
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.EnumDescription(System.Text.Json.Nodes.JsonObject! source) -> void
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.Name.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.Name.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.Value.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.EnumDescription.Value.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Date.get -> System.DateTimeOffset?
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Date.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Description.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Description.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.OpenApiDeprecationExtension() -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.RemovalDate.get -> System.DateTimeOffset?
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.RemovalDate.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Version.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Version.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiDeprecationExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumFlagsExtension
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumFlagsExtension.IsFlags.get -> bool
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumFlagsExtension.IsFlags.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumFlagsExtension.OpenApiEnumFlagsExtension() -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumFlagsExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension.EnumName.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension.EnumName.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension.OpenApiEnumValuesDescriptionExtension() -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension.ValuesDescriptions.get -> System.Collections.Generic.List!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension.ValuesDescriptions.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiEnumValuesDescriptionExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.ItemName.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.ItemName.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.NextLinkName.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.NextLinkName.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.OpenApiPagingExtension() -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.OperationName.get -> string!
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.OperationName.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPagingExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPrimaryErrorMessageExtension
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPrimaryErrorMessageExtension.IsPrimaryErrorMessage.get -> bool
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPrimaryErrorMessageExtension.IsPrimaryErrorMessage.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPrimaryErrorMessageExtension.OpenApiPrimaryErrorMessageExtension() -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiPrimaryErrorMessageExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiReservedParameterExtension
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiReservedParameterExtension.IsReserved.get -> bool?
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiReservedParameterExtension.IsReserved.set -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiReservedParameterExtension.OpenApiReservedParameterExtension() -> void
+Microsoft.OpenApi.MicrosoftExtensions.OpenApiReservedParameterExtension.Write(Microsoft.OpenApi.IOpenApiWriter! writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion) -> void
+Microsoft.OpenApi.OpenApiCallback
+Microsoft.OpenApi.OpenApiCallback.AddPathItem(Microsoft.OpenApi.RuntimeExpression! expression, Microsoft.OpenApi.IOpenApiPathItem! pathItem) -> void
+Microsoft.OpenApi.OpenApiCallback.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiCallback!
+Microsoft.OpenApi.OpenApiCallback.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiCallback.Extensions.set -> void
+Microsoft.OpenApi.OpenApiCallback.OpenApiCallback() -> void
+Microsoft.OpenApi.OpenApiCallback.PathItems.get -> System.Collections.Generic.Dictionary?
+Microsoft.OpenApi.OpenApiCallback.PathItems.set -> void
+Microsoft.OpenApi.OpenApiCallbackReference
+Microsoft.OpenApi.OpenApiCallbackReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiCallback!
+Microsoft.OpenApi.OpenApiCallbackReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiCallbackReference.OpenApiCallbackReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiCallbackReference.PathItems.get -> System.Collections.Generic.Dictionary?
+Microsoft.OpenApi.OpenApiComponents
+Microsoft.OpenApi.OpenApiComponents.Callbacks.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Callbacks.set -> void
+Microsoft.OpenApi.OpenApiComponents.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Examples.set -> void
+Microsoft.OpenApi.OpenApiComponents.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Extensions.set -> void
+Microsoft.OpenApi.OpenApiComponents.Headers.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Headers.set -> void
+Microsoft.OpenApi.OpenApiComponents.Links.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Links.set -> void
+Microsoft.OpenApi.OpenApiComponents.MediaTypes.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.MediaTypes.set -> void
+Microsoft.OpenApi.OpenApiComponents.OpenApiComponents() -> void
+Microsoft.OpenApi.OpenApiComponents.OpenApiComponents(Microsoft.OpenApi.OpenApiComponents? components) -> void
+Microsoft.OpenApi.OpenApiComponents.Parameters.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Parameters.set -> void
+Microsoft.OpenApi.OpenApiComponents.PathItems.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.PathItems.set -> void
+Microsoft.OpenApi.OpenApiComponents.RequestBodies.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.RequestBodies.set -> void
+Microsoft.OpenApi.OpenApiComponents.Responses.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Responses.set -> void
+Microsoft.OpenApi.OpenApiComponents.Schemas.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.Schemas.set -> void
+Microsoft.OpenApi.OpenApiComponents.SecuritySchemes.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiComponents.SecuritySchemes.set -> void
+Microsoft.OpenApi.OpenApiComponentsRules
+Microsoft.OpenApi.OpenApiConstants
+Microsoft.OpenApi.OpenApiContact
+Microsoft.OpenApi.OpenApiContact.Email.get -> string?
+Microsoft.OpenApi.OpenApiContact.Email.set -> void
+Microsoft.OpenApi.OpenApiContact.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiContact.Extensions.set -> void
+Microsoft.OpenApi.OpenApiContact.Name.get -> string?
+Microsoft.OpenApi.OpenApiContact.Name.set -> void
+Microsoft.OpenApi.OpenApiContact.OpenApiContact() -> void
+Microsoft.OpenApi.OpenApiContact.OpenApiContact(Microsoft.OpenApi.OpenApiContact! contact) -> void
+Microsoft.OpenApi.OpenApiContact.Url.get -> System.Uri?
+Microsoft.OpenApi.OpenApiContact.Url.set -> void
+Microsoft.OpenApi.OpenApiContactRules
+Microsoft.OpenApi.OpenApiDiscriminator
+Microsoft.OpenApi.OpenApiDiscriminator.DefaultMapping.get -> Microsoft.OpenApi.OpenApiSchemaReference?
+Microsoft.OpenApi.OpenApiDiscriminator.DefaultMapping.set -> void
+Microsoft.OpenApi.OpenApiDiscriminator.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiDiscriminator.Extensions.set -> void
+Microsoft.OpenApi.OpenApiDiscriminator.Mapping.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiDiscriminator.Mapping.set -> void
+Microsoft.OpenApi.OpenApiDiscriminator.OpenApiDiscriminator() -> void
+Microsoft.OpenApi.OpenApiDiscriminator.OpenApiDiscriminator(Microsoft.OpenApi.OpenApiDiscriminator! discriminator) -> void
+Microsoft.OpenApi.OpenApiDiscriminator.PropertyName.get -> string?
+Microsoft.OpenApi.OpenApiDiscriminator.PropertyName.set -> void
+Microsoft.OpenApi.OpenApiDiscriminator.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDiscriminator.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDiscriminator.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDiscriminator.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDocument
+Microsoft.OpenApi.OpenApiDocument.AddComponent(string! id, T componentToRegister) -> bool
+Microsoft.OpenApi.OpenApiDocument.BaseUri.get -> System.Uri!
+Microsoft.OpenApi.OpenApiDocument.Components.get -> Microsoft.OpenApi.OpenApiComponents?
+Microsoft.OpenApi.OpenApiDocument.Components.set -> void
+Microsoft.OpenApi.OpenApiDocument.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiDocument.Extensions.set -> void
+Microsoft.OpenApi.OpenApiDocument.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.OpenApiDocument.ExternalDocs.set -> void
+Microsoft.OpenApi.OpenApiDocument.GetHashCodeAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.OpenApiDocument.Info.get -> Microsoft.OpenApi.OpenApiInfo!
+Microsoft.OpenApi.OpenApiDocument.Info.set -> void
+Microsoft.OpenApi.OpenApiDocument.JsonSchemaDialect.get -> System.Uri?
+Microsoft.OpenApi.OpenApiDocument.JsonSchemaDialect.set -> void
+Microsoft.OpenApi.OpenApiDocument.Metadata.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiDocument.Metadata.set -> void
+Microsoft.OpenApi.OpenApiDocument.OpenApiDocument() -> void
+Microsoft.OpenApi.OpenApiDocument.OpenApiDocument(Microsoft.OpenApi.OpenApiDocument? document) -> void
+Microsoft.OpenApi.OpenApiDocument.Paths.get -> Microsoft.OpenApi.OpenApiPaths!
+Microsoft.OpenApi.OpenApiDocument.Paths.set -> void
+Microsoft.OpenApi.OpenApiDocument.RegisterComponents() -> void
+Microsoft.OpenApi.OpenApiDocument.Security.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiDocument.Security.set -> void
+Microsoft.OpenApi.OpenApiDocument.Self.get -> System.Uri?
+Microsoft.OpenApi.OpenApiDocument.Self.set -> void
+Microsoft.OpenApi.OpenApiDocument.SerializeAs(Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDocument.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDocument.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDocument.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDocument.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiDocument.Servers.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiDocument.Servers.set -> void
+Microsoft.OpenApi.OpenApiDocument.SetReferenceHostDocument() -> void
+Microsoft.OpenApi.OpenApiDocument.Tags.get -> System.Collections.Generic.ISet?
+Microsoft.OpenApi.OpenApiDocument.Tags.set -> void
+Microsoft.OpenApi.OpenApiDocument.Webhooks.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiDocument.Webhooks.set -> void
+Microsoft.OpenApi.OpenApiDocument.Workspace.get -> Microsoft.OpenApi.OpenApiWorkspace?
+Microsoft.OpenApi.OpenApiDocument.Workspace.set -> void
+Microsoft.OpenApi.OpenApiDocumentRules
+Microsoft.OpenApi.OpenApiElementExtensions
+Microsoft.OpenApi.OpenApiEncoding
+Microsoft.OpenApi.OpenApiEncoding.AllowReserved.get -> bool?
+Microsoft.OpenApi.OpenApiEncoding.AllowReserved.set -> void
+Microsoft.OpenApi.OpenApiEncoding.ContentType.get -> string?
+Microsoft.OpenApi.OpenApiEncoding.ContentType.set -> void
+Microsoft.OpenApi.OpenApiEncoding.Encoding.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiEncoding.Encoding.set -> void
+Microsoft.OpenApi.OpenApiEncoding.Explode.get -> bool?
+Microsoft.OpenApi.OpenApiEncoding.Explode.set -> void
+Microsoft.OpenApi.OpenApiEncoding.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiEncoding.Extensions.set -> void
+Microsoft.OpenApi.OpenApiEncoding.Headers.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiEncoding.Headers.set -> void
+Microsoft.OpenApi.OpenApiEncoding.ItemEncoding.get -> Microsoft.OpenApi.OpenApiEncoding?
+Microsoft.OpenApi.OpenApiEncoding.ItemEncoding.set -> void
+Microsoft.OpenApi.OpenApiEncoding.OpenApiEncoding() -> void
+Microsoft.OpenApi.OpenApiEncoding.OpenApiEncoding(Microsoft.OpenApi.OpenApiEncoding! encoding) -> void
+Microsoft.OpenApi.OpenApiEncoding.PrefixEncoding.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiEncoding.PrefixEncoding.set -> void
+Microsoft.OpenApi.OpenApiEncoding.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.OpenApiEncoding.Style.set -> void
+Microsoft.OpenApi.OpenApiError
+Microsoft.OpenApi.OpenApiError.Message.get -> string!
+Microsoft.OpenApi.OpenApiError.Message.set -> void
+Microsoft.OpenApi.OpenApiError.OpenApiError(Microsoft.OpenApi.OpenApiError! error) -> void
+Microsoft.OpenApi.OpenApiError.OpenApiError(Microsoft.OpenApi.OpenApiException! exception) -> void
+Microsoft.OpenApi.OpenApiError.OpenApiError(string? pointer, string! message) -> void
+Microsoft.OpenApi.OpenApiError.Pointer.get -> string?
+Microsoft.OpenApi.OpenApiError.Pointer.set -> void
+Microsoft.OpenApi.OpenApiExample
+Microsoft.OpenApi.OpenApiExample.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiExample!
+Microsoft.OpenApi.OpenApiExample.DataValue.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiExample.DataValue.set -> void
+Microsoft.OpenApi.OpenApiExample.Description.get -> string?
+Microsoft.OpenApi.OpenApiExample.Description.set -> void
+Microsoft.OpenApi.OpenApiExample.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiExample.Extensions.set -> void
+Microsoft.OpenApi.OpenApiExample.ExternalValue.get -> string?
+Microsoft.OpenApi.OpenApiExample.ExternalValue.set -> void
+Microsoft.OpenApi.OpenApiExample.OpenApiExample() -> void
+Microsoft.OpenApi.OpenApiExample.SerializedValue.get -> string?
+Microsoft.OpenApi.OpenApiExample.SerializedValue.set -> void
+Microsoft.OpenApi.OpenApiExample.Summary.get -> string?
+Microsoft.OpenApi.OpenApiExample.Summary.set -> void
+Microsoft.OpenApi.OpenApiExample.Value.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiExample.Value.set -> void
+Microsoft.OpenApi.OpenApiExampleReference
+Microsoft.OpenApi.OpenApiExampleReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiExample!
+Microsoft.OpenApi.OpenApiExampleReference.DataValue.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiExampleReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiExampleReference.Description.set -> void
+Microsoft.OpenApi.OpenApiExampleReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiExampleReference.ExternalValue.get -> string?
+Microsoft.OpenApi.OpenApiExampleReference.OpenApiExampleReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiExampleReference.SerializedValue.get -> string?
+Microsoft.OpenApi.OpenApiExampleReference.Summary.get -> string?
+Microsoft.OpenApi.OpenApiExampleReference.Summary.set -> void
+Microsoft.OpenApi.OpenApiExampleReference.Value.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiException
+Microsoft.OpenApi.OpenApiException.OpenApiException() -> void
+Microsoft.OpenApi.OpenApiException.OpenApiException(string! message) -> void
+Microsoft.OpenApi.OpenApiException.OpenApiException(string! message, System.Exception? innerException) -> void
+Microsoft.OpenApi.OpenApiException.Pointer.get -> string?
+Microsoft.OpenApi.OpenApiException.Pointer.set -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary
+Microsoft.OpenApi.OpenApiExtensibleDictionary.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiExtensibleDictionary.Extensions.set -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary.OpenApiExtensibleDictionary() -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary.OpenApiExtensibleDictionary(System.Collections.Generic.Dictionary! dictionary, System.Collections.Generic.Dictionary? extensions = null) -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiExtensibleDictionary.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiExtensibleExtensions
+Microsoft.OpenApi.OpenApiExtensibleRules
+Microsoft.OpenApi.OpenApiExternalDocs
+Microsoft.OpenApi.OpenApiExternalDocs.Description.get -> string?
+Microsoft.OpenApi.OpenApiExternalDocs.Description.set -> void
+Microsoft.OpenApi.OpenApiExternalDocs.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiExternalDocs.Extensions.set -> void
+Microsoft.OpenApi.OpenApiExternalDocs.OpenApiExternalDocs() -> void
+Microsoft.OpenApi.OpenApiExternalDocs.OpenApiExternalDocs(Microsoft.OpenApi.OpenApiExternalDocs! externalDocs) -> void
+Microsoft.OpenApi.OpenApiExternalDocs.Url.get -> System.Uri?
+Microsoft.OpenApi.OpenApiExternalDocs.Url.set -> void
+Microsoft.OpenApi.OpenApiExternalDocsRules
+Microsoft.OpenApi.OpenApiFilterService
+Microsoft.OpenApi.OpenApiHeader
+Microsoft.OpenApi.OpenApiHeader.AllowEmptyValue.get -> bool
+Microsoft.OpenApi.OpenApiHeader.AllowEmptyValue.set -> void
+Microsoft.OpenApi.OpenApiHeader.AllowReserved.get -> bool
+Microsoft.OpenApi.OpenApiHeader.AllowReserved.set -> void
+Microsoft.OpenApi.OpenApiHeader.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiHeader.Content.set -> void
+Microsoft.OpenApi.OpenApiHeader.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiHeader!
+Microsoft.OpenApi.OpenApiHeader.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiHeader.Deprecated.set -> void
+Microsoft.OpenApi.OpenApiHeader.Description.get -> string?
+Microsoft.OpenApi.OpenApiHeader.Description.set -> void
+Microsoft.OpenApi.OpenApiHeader.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiHeader.Example.set -> void
+Microsoft.OpenApi.OpenApiHeader.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiHeader.Examples.set -> void
+Microsoft.OpenApi.OpenApiHeader.Explode.get -> bool
+Microsoft.OpenApi.OpenApiHeader.Explode.set -> void
+Microsoft.OpenApi.OpenApiHeader.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiHeader.Extensions.set -> void
+Microsoft.OpenApi.OpenApiHeader.OpenApiHeader() -> void
+Microsoft.OpenApi.OpenApiHeader.Required.get -> bool
+Microsoft.OpenApi.OpenApiHeader.Required.set -> void
+Microsoft.OpenApi.OpenApiHeader.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiHeader.Schema.set -> void
+Microsoft.OpenApi.OpenApiHeader.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.OpenApiHeader.Style.set -> void
+Microsoft.OpenApi.OpenApiHeaderReference
+Microsoft.OpenApi.OpenApiHeaderReference.AllowEmptyValue.get -> bool
+Microsoft.OpenApi.OpenApiHeaderReference.AllowReserved.get -> bool
+Microsoft.OpenApi.OpenApiHeaderReference.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiHeaderReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiHeader!
+Microsoft.OpenApi.OpenApiHeaderReference.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiHeaderReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiHeaderReference.Description.set -> void
+Microsoft.OpenApi.OpenApiHeaderReference.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiHeaderReference.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiHeaderReference.Explode.get -> bool
+Microsoft.OpenApi.OpenApiHeaderReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiHeaderReference.OpenApiHeaderReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiHeaderReference.Required.get -> bool
+Microsoft.OpenApi.OpenApiHeaderReference.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiHeaderReference.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.OpenApiInfo
+Microsoft.OpenApi.OpenApiInfo.Contact.get -> Microsoft.OpenApi.OpenApiContact?
+Microsoft.OpenApi.OpenApiInfo.Contact.set -> void
+Microsoft.OpenApi.OpenApiInfo.Description.get -> string?
+Microsoft.OpenApi.OpenApiInfo.Description.set -> void
+Microsoft.OpenApi.OpenApiInfo.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiInfo.Extensions.set -> void
+Microsoft.OpenApi.OpenApiInfo.License.get -> Microsoft.OpenApi.OpenApiLicense?
+Microsoft.OpenApi.OpenApiInfo.License.set -> void
+Microsoft.OpenApi.OpenApiInfo.OpenApiInfo() -> void
+Microsoft.OpenApi.OpenApiInfo.OpenApiInfo(Microsoft.OpenApi.OpenApiInfo! info) -> void
+Microsoft.OpenApi.OpenApiInfo.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiInfo.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiInfo.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiInfo.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiInfo.Summary.get -> string?
+Microsoft.OpenApi.OpenApiInfo.Summary.set -> void
+Microsoft.OpenApi.OpenApiInfo.TermsOfService.get -> System.Uri?
+Microsoft.OpenApi.OpenApiInfo.TermsOfService.set -> void
+Microsoft.OpenApi.OpenApiInfo.Title.get -> string?
+Microsoft.OpenApi.OpenApiInfo.Title.set -> void
+Microsoft.OpenApi.OpenApiInfo.Version.get -> string?
+Microsoft.OpenApi.OpenApiInfo.Version.set -> void
+Microsoft.OpenApi.OpenApiInfoRules
+Microsoft.OpenApi.OpenApiJsonWriter
+Microsoft.OpenApi.OpenApiJsonWriter.OpenApiJsonWriter(System.IO.TextWriter! textWriter) -> void
+Microsoft.OpenApi.OpenApiJsonWriter.OpenApiJsonWriter(System.IO.TextWriter! textWriter, Microsoft.OpenApi.OpenApiJsonWriterSettings! settings) -> void
+Microsoft.OpenApi.OpenApiJsonWriter.OpenApiJsonWriter(System.IO.TextWriter! textWriter, Microsoft.OpenApi.OpenApiWriterSettings? settings) -> void
+Microsoft.OpenApi.OpenApiJsonWriter.OpenApiJsonWriter(System.IO.TextWriter! textWriter, Microsoft.OpenApi.OpenApiWriterSettings? settings, bool terseOutput) -> void
+Microsoft.OpenApi.OpenApiJsonWriterSettings
+Microsoft.OpenApi.OpenApiJsonWriterSettings.OpenApiJsonWriterSettings() -> void
+Microsoft.OpenApi.OpenApiJsonWriterSettings.Terse.get -> bool
+Microsoft.OpenApi.OpenApiJsonWriterSettings.Terse.set -> void
+Microsoft.OpenApi.OpenApiLicense
+Microsoft.OpenApi.OpenApiLicense.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiLicense.Extensions.set -> void
+Microsoft.OpenApi.OpenApiLicense.Identifier.get -> string?
+Microsoft.OpenApi.OpenApiLicense.Identifier.set -> void
+Microsoft.OpenApi.OpenApiLicense.Name.get -> string?
+Microsoft.OpenApi.OpenApiLicense.Name.set -> void
+Microsoft.OpenApi.OpenApiLicense.OpenApiLicense() -> void
+Microsoft.OpenApi.OpenApiLicense.OpenApiLicense(Microsoft.OpenApi.OpenApiLicense! license) -> void
+Microsoft.OpenApi.OpenApiLicense.Url.get -> System.Uri?
+Microsoft.OpenApi.OpenApiLicense.Url.set -> void
+Microsoft.OpenApi.OpenApiLicenseRules
+Microsoft.OpenApi.OpenApiLink
+Microsoft.OpenApi.OpenApiLink.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiLink!
+Microsoft.OpenApi.OpenApiLink.Description.get -> string?
+Microsoft.OpenApi.OpenApiLink.Description.set -> void
+Microsoft.OpenApi.OpenApiLink.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiLink.Extensions.set -> void
+Microsoft.OpenApi.OpenApiLink.OpenApiLink() -> void
+Microsoft.OpenApi.OpenApiLink.OperationId.get -> string?
+Microsoft.OpenApi.OpenApiLink.OperationId.set -> void
+Microsoft.OpenApi.OpenApiLink.OperationRef.get -> string?
+Microsoft.OpenApi.OpenApiLink.OperationRef.set -> void
+Microsoft.OpenApi.OpenApiLink.Parameters.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiLink.Parameters.set -> void
+Microsoft.OpenApi.OpenApiLink.RequestBody.get -> Microsoft.OpenApi.RuntimeExpressionAnyWrapper?
+Microsoft.OpenApi.OpenApiLink.RequestBody.set -> void
+Microsoft.OpenApi.OpenApiLink.Server.get -> Microsoft.OpenApi.OpenApiServer?
+Microsoft.OpenApi.OpenApiLink.Server.set -> void
+Microsoft.OpenApi.OpenApiLinkReference
+Microsoft.OpenApi.OpenApiLinkReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiLink!
+Microsoft.OpenApi.OpenApiLinkReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiLinkReference.Description.set -> void
+Microsoft.OpenApi.OpenApiLinkReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiLinkReference.OpenApiLinkReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiLinkReference.OperationId.get -> string?
+Microsoft.OpenApi.OpenApiLinkReference.OperationRef.get -> string?
+Microsoft.OpenApi.OpenApiLinkReference.Parameters.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiLinkReference.RequestBody.get -> Microsoft.OpenApi.RuntimeExpressionAnyWrapper?
+Microsoft.OpenApi.OpenApiLinkReference.Server.get -> Microsoft.OpenApi.OpenApiServer?
+Microsoft.OpenApi.OpenApiMediaType
+Microsoft.OpenApi.OpenApiMediaType.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiMediaType!
+Microsoft.OpenApi.OpenApiMediaType.Encoding.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiMediaType.Encoding.set -> void
+Microsoft.OpenApi.OpenApiMediaType.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiMediaType.Example.set -> void
+Microsoft.OpenApi.OpenApiMediaType.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiMediaType.Examples.set -> void
+Microsoft.OpenApi.OpenApiMediaType.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiMediaType.Extensions.set -> void
+Microsoft.OpenApi.OpenApiMediaType.ItemEncoding.get -> Microsoft.OpenApi.OpenApiEncoding?
+Microsoft.OpenApi.OpenApiMediaType.ItemEncoding.set -> void
+Microsoft.OpenApi.OpenApiMediaType.ItemSchema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiMediaType.ItemSchema.set -> void
+Microsoft.OpenApi.OpenApiMediaType.OpenApiMediaType() -> void
+Microsoft.OpenApi.OpenApiMediaType.OpenApiMediaType(Microsoft.OpenApi.OpenApiMediaType? mediaType) -> void
+Microsoft.OpenApi.OpenApiMediaType.PrefixEncoding.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiMediaType.PrefixEncoding.set -> void
+Microsoft.OpenApi.OpenApiMediaType.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiMediaType.Schema.set -> void
+Microsoft.OpenApi.OpenApiMediaTypeReference
+Microsoft.OpenApi.OpenApiMediaTypeReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiMediaType!
+Microsoft.OpenApi.OpenApiMediaTypeReference.Encoding.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiMediaTypeReference.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiMediaTypeReference.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiMediaTypeReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiMediaTypeReference.ItemEncoding.get -> Microsoft.OpenApi.OpenApiEncoding?
+Microsoft.OpenApi.OpenApiMediaTypeReference.ItemSchema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiMediaTypeReference.OpenApiMediaTypeReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiMediaTypeReference.PrefixEncoding.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiMediaTypeReference.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiNonDefaultRules
+Microsoft.OpenApi.OpenApiOAuthFlow
+Microsoft.OpenApi.OpenApiOAuthFlow.AuthorizationUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiOAuthFlow.AuthorizationUrl.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.DeviceAuthorizationUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiOAuthFlow.DeviceAuthorizationUrl.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiOAuthFlow.Extensions.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.OpenApiOAuthFlow() -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.OpenApiOAuthFlow(Microsoft.OpenApi.OpenApiOAuthFlow! oAuthFlow) -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.RefreshUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiOAuthFlow.RefreshUrl.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.Scopes.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiOAuthFlow.Scopes.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiOAuthFlow.TokenUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiOAuthFlow.TokenUrl.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlowRules
+Microsoft.OpenApi.OpenApiOAuthFlows
+Microsoft.OpenApi.OpenApiOAuthFlows.AuthorizationCode.get -> Microsoft.OpenApi.OpenApiOAuthFlow?
+Microsoft.OpenApi.OpenApiOAuthFlows.AuthorizationCode.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.ClientCredentials.get -> Microsoft.OpenApi.OpenApiOAuthFlow?
+Microsoft.OpenApi.OpenApiOAuthFlows.ClientCredentials.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.DeviceAuthorization.get -> Microsoft.OpenApi.OpenApiOAuthFlow?
+Microsoft.OpenApi.OpenApiOAuthFlows.DeviceAuthorization.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiOAuthFlows.Extensions.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.Implicit.get -> Microsoft.OpenApi.OpenApiOAuthFlow?
+Microsoft.OpenApi.OpenApiOAuthFlows.Implicit.set -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.OpenApiOAuthFlows() -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.OpenApiOAuthFlows(Microsoft.OpenApi.OpenApiOAuthFlows! oAuthFlows) -> void
+Microsoft.OpenApi.OpenApiOAuthFlows.Password.get -> Microsoft.OpenApi.OpenApiOAuthFlow?
+Microsoft.OpenApi.OpenApiOAuthFlows.Password.set -> void
+Microsoft.OpenApi.OpenApiOperation
+Microsoft.OpenApi.OpenApiOperation.Callbacks.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiOperation.Callbacks.set -> void
+Microsoft.OpenApi.OpenApiOperation.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiOperation.Deprecated.set -> void
+Microsoft.OpenApi.OpenApiOperation.Description.get -> string?
+Microsoft.OpenApi.OpenApiOperation.Description.set -> void
+Microsoft.OpenApi.OpenApiOperation.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiOperation.Extensions.set -> void
+Microsoft.OpenApi.OpenApiOperation.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.OpenApiOperation.ExternalDocs.set -> void
+Microsoft.OpenApi.OpenApiOperation.Metadata.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiOperation.Metadata.set -> void
+Microsoft.OpenApi.OpenApiOperation.OpenApiOperation() -> void
+Microsoft.OpenApi.OpenApiOperation.OpenApiOperation(Microsoft.OpenApi.OpenApiOperation! operation) -> void
+Microsoft.OpenApi.OpenApiOperation.OperationId.get -> string?
+Microsoft.OpenApi.OpenApiOperation.OperationId.set -> void
+Microsoft.OpenApi.OpenApiOperation.Parameters.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiOperation.Parameters.set -> void
+Microsoft.OpenApi.OpenApiOperation.RequestBody.get -> Microsoft.OpenApi.IOpenApiRequestBody?
+Microsoft.OpenApi.OpenApiOperation.RequestBody.set -> void
+Microsoft.OpenApi.OpenApiOperation.Responses.get -> Microsoft.OpenApi.OpenApiResponses?
+Microsoft.OpenApi.OpenApiOperation.Responses.set -> void
+Microsoft.OpenApi.OpenApiOperation.Security.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiOperation.Security.set -> void
+Microsoft.OpenApi.OpenApiOperation.Servers.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiOperation.Servers.set -> void
+Microsoft.OpenApi.OpenApiOperation.Summary.get -> string?
+Microsoft.OpenApi.OpenApiOperation.Summary.set -> void
+Microsoft.OpenApi.OpenApiOperation.Tags.get -> System.Collections.Generic.ISet?
+Microsoft.OpenApi.OpenApiOperation.Tags.set -> void
+Microsoft.OpenApi.OpenApiParameter
+Microsoft.OpenApi.OpenApiParameter.AllowEmptyValue.get -> bool
+Microsoft.OpenApi.OpenApiParameter.AllowEmptyValue.set -> void
+Microsoft.OpenApi.OpenApiParameter.AllowReserved.get -> bool
+Microsoft.OpenApi.OpenApiParameter.AllowReserved.set -> void
+Microsoft.OpenApi.OpenApiParameter.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiParameter.Content.set -> void
+Microsoft.OpenApi.OpenApiParameter.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiParameter!
+Microsoft.OpenApi.OpenApiParameter.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiParameter.Deprecated.set -> void
+Microsoft.OpenApi.OpenApiParameter.Description.get -> string?
+Microsoft.OpenApi.OpenApiParameter.Description.set -> void
+Microsoft.OpenApi.OpenApiParameter.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiParameter.Example.set -> void
+Microsoft.OpenApi.OpenApiParameter.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiParameter.Examples.set -> void
+Microsoft.OpenApi.OpenApiParameter.Explode.get -> bool
+Microsoft.OpenApi.OpenApiParameter.Explode.set -> void
+Microsoft.OpenApi.OpenApiParameter.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiParameter.Extensions.set -> void
+Microsoft.OpenApi.OpenApiParameter.In.get -> Microsoft.OpenApi.ParameterLocation?
+Microsoft.OpenApi.OpenApiParameter.In.set -> void
+Microsoft.OpenApi.OpenApiParameter.Name.get -> string?
+Microsoft.OpenApi.OpenApiParameter.Name.set -> void
+Microsoft.OpenApi.OpenApiParameter.OpenApiParameter() -> void
+Microsoft.OpenApi.OpenApiParameter.Required.get -> bool
+Microsoft.OpenApi.OpenApiParameter.Required.set -> void
+Microsoft.OpenApi.OpenApiParameter.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiParameter.Schema.set -> void
+Microsoft.OpenApi.OpenApiParameter.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.OpenApiParameter.Style.set -> void
+Microsoft.OpenApi.OpenApiParameterReference
+Microsoft.OpenApi.OpenApiParameterReference.AllowEmptyValue.get -> bool
+Microsoft.OpenApi.OpenApiParameterReference.AllowReserved.get -> bool
+Microsoft.OpenApi.OpenApiParameterReference.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiParameterReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiParameter!
+Microsoft.OpenApi.OpenApiParameterReference.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiParameterReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiParameterReference.Description.set -> void
+Microsoft.OpenApi.OpenApiParameterReference.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiParameterReference.Examples.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiParameterReference.Explode.get -> bool
+Microsoft.OpenApi.OpenApiParameterReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiParameterReference.In.get -> Microsoft.OpenApi.ParameterLocation?
+Microsoft.OpenApi.OpenApiParameterReference.Name.get -> string?
+Microsoft.OpenApi.OpenApiParameterReference.OpenApiParameterReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiParameterReference.Required.get -> bool
+Microsoft.OpenApi.OpenApiParameterReference.Schema.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiParameterReference.Style.get -> Microsoft.OpenApi.ParameterStyle?
+Microsoft.OpenApi.OpenApiParameterRules
+Microsoft.OpenApi.OpenApiPathItem
+Microsoft.OpenApi.OpenApiPathItem.AddOperation(System.Net.Http.HttpMethod! operationType, Microsoft.OpenApi.OpenApiOperation! operation) -> void
+Microsoft.OpenApi.OpenApiPathItem.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiPathItem!
+Microsoft.OpenApi.OpenApiPathItem.Description.get -> string?
+Microsoft.OpenApi.OpenApiPathItem.Description.set -> void
+Microsoft.OpenApi.OpenApiPathItem.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiPathItem.Extensions.set -> void
+Microsoft.OpenApi.OpenApiPathItem.OpenApiPathItem() -> void
+Microsoft.OpenApi.OpenApiPathItem.Operations.get -> System.Collections.Generic.Dictionary?
+Microsoft.OpenApi.OpenApiPathItem.Operations.set -> void
+Microsoft.OpenApi.OpenApiPathItem.Parameters.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiPathItem.Parameters.set -> void
+Microsoft.OpenApi.OpenApiPathItem.Servers.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiPathItem.Servers.set -> void
+Microsoft.OpenApi.OpenApiPathItem.Summary.get -> string?
+Microsoft.OpenApi.OpenApiPathItem.Summary.set -> void
+Microsoft.OpenApi.OpenApiPathItemReference
+Microsoft.OpenApi.OpenApiPathItemReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiPathItem!
+Microsoft.OpenApi.OpenApiPathItemReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiPathItemReference.Description.set -> void
+Microsoft.OpenApi.OpenApiPathItemReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiPathItemReference.OpenApiPathItemReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiPathItemReference.Operations.get -> System.Collections.Generic.Dictionary?
+Microsoft.OpenApi.OpenApiPathItemReference.Parameters.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiPathItemReference.Servers.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiPathItemReference.Summary.get -> string?
+Microsoft.OpenApi.OpenApiPathItemReference.Summary.set -> void
+Microsoft.OpenApi.OpenApiPaths
+Microsoft.OpenApi.OpenApiPaths.OpenApiPaths() -> void
+Microsoft.OpenApi.OpenApiPaths.OpenApiPaths(Microsoft.OpenApi.OpenApiPaths! paths) -> void
+Microsoft.OpenApi.OpenApiPathsRules
+Microsoft.OpenApi.OpenApiReaderException
+Microsoft.OpenApi.OpenApiReaderException.OpenApiReaderException() -> void
+Microsoft.OpenApi.OpenApiReaderException.OpenApiReaderException(string! message) -> void
+Microsoft.OpenApi.OpenApiReaderException.OpenApiReaderException(string! message, Microsoft.OpenApi.Reader.ParsingContext! context) -> void
+Microsoft.OpenApi.OpenApiReaderException.OpenApiReaderException(string! message, System.Exception! innerException) -> void
+Microsoft.OpenApi.OpenApiRecommendedRules
+Microsoft.OpenApi.OpenApiReferenceError
+Microsoft.OpenApi.OpenApiReferenceError.OpenApiReferenceError(Microsoft.OpenApi.BaseOpenApiReference! reference, string! message) -> void
+Microsoft.OpenApi.OpenApiReferenceError.OpenApiReferenceError(Microsoft.OpenApi.OpenApiException! exception) -> void
+Microsoft.OpenApi.OpenApiReferenceWithDescription
+Microsoft.OpenApi.OpenApiReferenceWithDescription.Description.get -> string?
+Microsoft.OpenApi.OpenApiReferenceWithDescription.Description.set -> void
+Microsoft.OpenApi.OpenApiReferenceWithDescription.OpenApiReferenceWithDescription() -> void
+Microsoft.OpenApi.OpenApiReferenceWithDescription.OpenApiReferenceWithDescription(Microsoft.OpenApi.OpenApiReferenceWithDescription! reference) -> void
+Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary
+Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.OpenApiReferenceWithDescriptionAndSummary() -> void
+Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.OpenApiReferenceWithDescriptionAndSummary(Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary! reference) -> void
+Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.Summary.get -> string?
+Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.Summary.set -> void
+Microsoft.OpenApi.OpenApiRequestBody
+Microsoft.OpenApi.OpenApiRequestBody.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiRequestBody.Content.set -> void
+Microsoft.OpenApi.OpenApiRequestBody.ConvertToBodyParameter(Microsoft.OpenApi.IOpenApiWriter! writer) -> Microsoft.OpenApi.IOpenApiParameter!
+Microsoft.OpenApi.OpenApiRequestBody.ConvertToFormDataParameters(Microsoft.OpenApi.IOpenApiWriter! writer) -> System.Collections.Generic.IEnumerable!
+Microsoft.OpenApi.OpenApiRequestBody.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiRequestBody!
+Microsoft.OpenApi.OpenApiRequestBody.Description.get -> string?
+Microsoft.OpenApi.OpenApiRequestBody.Description.set -> void
+Microsoft.OpenApi.OpenApiRequestBody.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiRequestBody.Extensions.set -> void
+Microsoft.OpenApi.OpenApiRequestBody.OpenApiRequestBody() -> void
+Microsoft.OpenApi.OpenApiRequestBody.Required.get -> bool
+Microsoft.OpenApi.OpenApiRequestBody.Required.set -> void
+Microsoft.OpenApi.OpenApiRequestBodyReference
+Microsoft.OpenApi.OpenApiRequestBodyReference.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiRequestBodyReference.ConvertToBodyParameter(Microsoft.OpenApi.IOpenApiWriter! writer) -> Microsoft.OpenApi.IOpenApiParameter?
+Microsoft.OpenApi.OpenApiRequestBodyReference.ConvertToFormDataParameters(Microsoft.OpenApi.IOpenApiWriter! writer) -> System.Collections.Generic.IEnumerable?
+Microsoft.OpenApi.OpenApiRequestBodyReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiRequestBody!
+Microsoft.OpenApi.OpenApiRequestBodyReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiRequestBodyReference.Description.set -> void
+Microsoft.OpenApi.OpenApiRequestBodyReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiRequestBodyReference.OpenApiRequestBodyReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiRequestBodyReference.Required.get -> bool
+Microsoft.OpenApi.OpenApiResponse
+Microsoft.OpenApi.OpenApiResponse.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponse.Content.set -> void
+Microsoft.OpenApi.OpenApiResponse.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiResponse!
+Microsoft.OpenApi.OpenApiResponse.Description.get -> string?
+Microsoft.OpenApi.OpenApiResponse.Description.set -> void
+Microsoft.OpenApi.OpenApiResponse.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponse.Extensions.set -> void
+Microsoft.OpenApi.OpenApiResponse.Headers.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponse.Headers.set -> void
+Microsoft.OpenApi.OpenApiResponse.Links.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponse.Links.set -> void
+Microsoft.OpenApi.OpenApiResponse.OpenApiResponse() -> void
+Microsoft.OpenApi.OpenApiResponse.Summary.get -> string?
+Microsoft.OpenApi.OpenApiResponse.Summary.set -> void
+Microsoft.OpenApi.OpenApiResponseReference
+Microsoft.OpenApi.OpenApiResponseReference.Content.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponseReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiResponse!
+Microsoft.OpenApi.OpenApiResponseReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiResponseReference.Description.set -> void
+Microsoft.OpenApi.OpenApiResponseReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponseReference.Headers.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponseReference.Links.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiResponseReference.OpenApiResponseReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiResponseReference.Summary.get -> string?
+Microsoft.OpenApi.OpenApiResponseReference.Summary.set -> void
+Microsoft.OpenApi.OpenApiResponseRules
+Microsoft.OpenApi.OpenApiResponses
+Microsoft.OpenApi.OpenApiResponses.OpenApiResponses() -> void
+Microsoft.OpenApi.OpenApiResponses.OpenApiResponses(Microsoft.OpenApi.OpenApiResponses! openApiResponses) -> void
+Microsoft.OpenApi.OpenApiResponsesRules
+Microsoft.OpenApi.OpenApiRuleAttribute
+Microsoft.OpenApi.OpenApiRuleAttribute.OpenApiRuleAttribute() -> void
+Microsoft.OpenApi.OpenApiSchema
+Microsoft.OpenApi.OpenApiSchema.AdditionalProperties.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiSchema.AdditionalProperties.set -> void
+Microsoft.OpenApi.OpenApiSchema.AdditionalPropertiesAllowed.get -> bool
+Microsoft.OpenApi.OpenApiSchema.AdditionalPropertiesAllowed.set -> void
+Microsoft.OpenApi.OpenApiSchema.AllOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchema.AllOf.set -> void
+Microsoft.OpenApi.OpenApiSchema.AnyOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchema.AnyOf.set -> void
+Microsoft.OpenApi.OpenApiSchema.Comment.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Comment.set -> void
+Microsoft.OpenApi.OpenApiSchema.Const.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Const.set -> void
+Microsoft.OpenApi.OpenApiSchema.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiSchema!
+Microsoft.OpenApi.OpenApiSchema.Default.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiSchema.Default.set -> void
+Microsoft.OpenApi.OpenApiSchema.Definitions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.Definitions.set -> void
+Microsoft.OpenApi.OpenApiSchema.DependentRequired.get -> System.Collections.Generic.IDictionary!>?
+Microsoft.OpenApi.OpenApiSchema.DependentRequired.set -> void
+Microsoft.OpenApi.OpenApiSchema.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiSchema.Deprecated.set -> void
+Microsoft.OpenApi.OpenApiSchema.Description.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Description.set -> void
+Microsoft.OpenApi.OpenApiSchema.Discriminator.get -> Microsoft.OpenApi.OpenApiDiscriminator?
+Microsoft.OpenApi.OpenApiSchema.Discriminator.set -> void
+Microsoft.OpenApi.OpenApiSchema.DynamicAnchor.get -> string?
+Microsoft.OpenApi.OpenApiSchema.DynamicAnchor.set -> void
+Microsoft.OpenApi.OpenApiSchema.DynamicRef.get -> string?
+Microsoft.OpenApi.OpenApiSchema.DynamicRef.set -> void
+Microsoft.OpenApi.OpenApiSchema.Enum.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchema.Enum.set -> void
+Microsoft.OpenApi.OpenApiSchema.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiSchema.Example.set -> void
+Microsoft.OpenApi.OpenApiSchema.Examples.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchema.Examples.set -> void
+Microsoft.OpenApi.OpenApiSchema.ExclusiveMaximum.get -> string?
+Microsoft.OpenApi.OpenApiSchema.ExclusiveMaximum.set -> void
+Microsoft.OpenApi.OpenApiSchema.ExclusiveMinimum.get -> string?
+Microsoft.OpenApi.OpenApiSchema.ExclusiveMinimum.set -> void
+Microsoft.OpenApi.OpenApiSchema.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.Extensions.set -> void
+Microsoft.OpenApi.OpenApiSchema.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.OpenApiSchema.ExternalDocs.set -> void
+Microsoft.OpenApi.OpenApiSchema.Format.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Format.set -> void
+Microsoft.OpenApi.OpenApiSchema.Id.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Id.set -> void
+Microsoft.OpenApi.OpenApiSchema.Items.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiSchema.Items.set -> void
+Microsoft.OpenApi.OpenApiSchema.Maximum.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Maximum.set -> void
+Microsoft.OpenApi.OpenApiSchema.MaxItems.get -> int?
+Microsoft.OpenApi.OpenApiSchema.MaxItems.set -> void
+Microsoft.OpenApi.OpenApiSchema.MaxLength.get -> int?
+Microsoft.OpenApi.OpenApiSchema.MaxLength.set -> void
+Microsoft.OpenApi.OpenApiSchema.MaxProperties.get -> int?
+Microsoft.OpenApi.OpenApiSchema.MaxProperties.set -> void
+Microsoft.OpenApi.OpenApiSchema.Metadata.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.Metadata.set -> void
+Microsoft.OpenApi.OpenApiSchema.Minimum.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Minimum.set -> void
+Microsoft.OpenApi.OpenApiSchema.MinItems.get -> int?
+Microsoft.OpenApi.OpenApiSchema.MinItems.set -> void
+Microsoft.OpenApi.OpenApiSchema.MinLength.get -> int?
+Microsoft.OpenApi.OpenApiSchema.MinLength.set -> void
+Microsoft.OpenApi.OpenApiSchema.MinProperties.get -> int?
+Microsoft.OpenApi.OpenApiSchema.MinProperties.set -> void
+Microsoft.OpenApi.OpenApiSchema.MultipleOf.get -> decimal?
+Microsoft.OpenApi.OpenApiSchema.MultipleOf.set -> void
+Microsoft.OpenApi.OpenApiSchema.Not.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiSchema.Not.set -> void
+Microsoft.OpenApi.OpenApiSchema.OneOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchema.OneOf.set -> void
+Microsoft.OpenApi.OpenApiSchema.OpenApiSchema() -> void
+Microsoft.OpenApi.OpenApiSchema.Pattern.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Pattern.set -> void
+Microsoft.OpenApi.OpenApiSchema.PatternProperties.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.PatternProperties.set -> void
+Microsoft.OpenApi.OpenApiSchema.Properties.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.Properties.set -> void
+Microsoft.OpenApi.OpenApiSchema.ReadOnly.get -> bool
+Microsoft.OpenApi.OpenApiSchema.ReadOnly.set -> void
+Microsoft.OpenApi.OpenApiSchema.Required.get -> System.Collections.Generic.ISet?
+Microsoft.OpenApi.OpenApiSchema.Required.set -> void
+Microsoft.OpenApi.OpenApiSchema.Schema.get -> System.Uri?
+Microsoft.OpenApi.OpenApiSchema.Schema.set -> void
+Microsoft.OpenApi.OpenApiSchema.Title.get -> string?
+Microsoft.OpenApi.OpenApiSchema.Title.set -> void
+Microsoft.OpenApi.OpenApiSchema.Type.get -> Microsoft.OpenApi.JsonSchemaType?
+Microsoft.OpenApi.OpenApiSchema.Type.set -> void
+Microsoft.OpenApi.OpenApiSchema.UnevaluatedProperties.get -> bool
+Microsoft.OpenApi.OpenApiSchema.UnevaluatedProperties.set -> void
+Microsoft.OpenApi.OpenApiSchema.UniqueItems.get -> bool?
+Microsoft.OpenApi.OpenApiSchema.UniqueItems.set -> void
+Microsoft.OpenApi.OpenApiSchema.UnrecognizedKeywords.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.UnrecognizedKeywords.set -> void
+Microsoft.OpenApi.OpenApiSchema.Vocabulary.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchema.Vocabulary.set -> void
+Microsoft.OpenApi.OpenApiSchema.WriteOnly.get -> bool
+Microsoft.OpenApi.OpenApiSchema.WriteOnly.set -> void
+Microsoft.OpenApi.OpenApiSchema.Xml.get -> Microsoft.OpenApi.OpenApiXml?
+Microsoft.OpenApi.OpenApiSchema.Xml.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference
+Microsoft.OpenApi.OpenApiSchemaReference.AdditionalProperties.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiSchemaReference.AdditionalPropertiesAllowed.get -> bool
+Microsoft.OpenApi.OpenApiSchemaReference.AllOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchemaReference.AnyOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchemaReference.Comment.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Const.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiSchema!
+Microsoft.OpenApi.OpenApiSchemaReference.Default.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiSchemaReference.Default.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Definitions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchemaReference.DependentRequired.get -> System.Collections.Generic.IDictionary!>?
+Microsoft.OpenApi.OpenApiSchemaReference.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiSchemaReference.Deprecated.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Description.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Discriminator.get -> Microsoft.OpenApi.OpenApiDiscriminator?
+Microsoft.OpenApi.OpenApiSchemaReference.DynamicAnchor.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.DynamicRef.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Enum.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchemaReference.Example.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.OpenApiSchemaReference.Examples.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchemaReference.Examples.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.ExclusiveMaximum.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.ExclusiveMinimum.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchemaReference.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.OpenApiSchemaReference.Format.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Id.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Items.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiSchemaReference.Maximum.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.MaxItems.get -> int?
+Microsoft.OpenApi.OpenApiSchemaReference.MaxLength.get -> int?
+Microsoft.OpenApi.OpenApiSchemaReference.MaxProperties.get -> int?
+Microsoft.OpenApi.OpenApiSchemaReference.Minimum.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.MinItems.get -> int?
+Microsoft.OpenApi.OpenApiSchemaReference.MinLength.get -> int?
+Microsoft.OpenApi.OpenApiSchemaReference.MinProperties.get -> int?
+Microsoft.OpenApi.OpenApiSchemaReference.MultipleOf.get -> decimal?
+Microsoft.OpenApi.OpenApiSchemaReference.Not.get -> Microsoft.OpenApi.IOpenApiSchema?
+Microsoft.OpenApi.OpenApiSchemaReference.OneOf.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.OpenApiSchemaReference.OpenApiSchemaReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Pattern.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.PatternProperties.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchemaReference.Properties.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchemaReference.ReadOnly.get -> bool
+Microsoft.OpenApi.OpenApiSchemaReference.ReadOnly.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Required.get -> System.Collections.Generic.ISet?
+Microsoft.OpenApi.OpenApiSchemaReference.Schema.get -> System.Uri?
+Microsoft.OpenApi.OpenApiSchemaReference.Title.get -> string?
+Microsoft.OpenApi.OpenApiSchemaReference.Title.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Type.get -> Microsoft.OpenApi.JsonSchemaType?
+Microsoft.OpenApi.OpenApiSchemaReference.UnevaluatedProperties.get -> bool
+Microsoft.OpenApi.OpenApiSchemaReference.UniqueItems.get -> bool?
+Microsoft.OpenApi.OpenApiSchemaReference.UnrecognizedKeywords.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchemaReference.Vocabulary.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSchemaReference.WriteOnly.get -> bool
+Microsoft.OpenApi.OpenApiSchemaReference.WriteOnly.set -> void
+Microsoft.OpenApi.OpenApiSchemaReference.Xml.get -> Microsoft.OpenApi.OpenApiXml?
+Microsoft.OpenApi.OpenApiSchemaRules
+Microsoft.OpenApi.OpenApiSecurityRequirement
+Microsoft.OpenApi.OpenApiSecurityRequirement.OpenApiSecurityRequirement() -> void
+Microsoft.OpenApi.OpenApiSecurityScheme
+Microsoft.OpenApi.OpenApiSecurityScheme.BearerFormat.get -> string?
+Microsoft.OpenApi.OpenApiSecurityScheme.BearerFormat.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiSecurityScheme!
+Microsoft.OpenApi.OpenApiSecurityScheme.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiSecurityScheme.Deprecated.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.Description.get -> string?
+Microsoft.OpenApi.OpenApiSecurityScheme.Description.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSecurityScheme.Extensions.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.Flows.get -> Microsoft.OpenApi.OpenApiOAuthFlows?
+Microsoft.OpenApi.OpenApiSecurityScheme.Flows.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.In.get -> Microsoft.OpenApi.ParameterLocation?
+Microsoft.OpenApi.OpenApiSecurityScheme.In.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.Name.get -> string?
+Microsoft.OpenApi.OpenApiSecurityScheme.Name.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.OpenApiSecurityScheme() -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.OpenIdConnectUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiSecurityScheme.OpenIdConnectUrl.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.Scheme.get -> string?
+Microsoft.OpenApi.OpenApiSecurityScheme.Scheme.set -> void
+Microsoft.OpenApi.OpenApiSecurityScheme.Type.get -> Microsoft.OpenApi.SecuritySchemeType?
+Microsoft.OpenApi.OpenApiSecurityScheme.Type.set -> void
+Microsoft.OpenApi.OpenApiSecuritySchemeReference
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.BearerFormat.get -> string?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiSecurityScheme!
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Deprecated.get -> bool
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Description.set -> void
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Flows.get -> Microsoft.OpenApi.OpenApiOAuthFlows?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.In.get -> Microsoft.OpenApi.ParameterLocation?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Name.get -> string?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.OpenApiSecuritySchemeReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.OpenIdConnectUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Scheme.get -> string?
+Microsoft.OpenApi.OpenApiSecuritySchemeReference.Type.get -> Microsoft.OpenApi.SecuritySchemeType?
+Microsoft.OpenApi.OpenApiSerializableExtensions
+Microsoft.OpenApi.OpenApiServer
+Microsoft.OpenApi.OpenApiServer.Description.get -> string?
+Microsoft.OpenApi.OpenApiServer.Description.set -> void
+Microsoft.OpenApi.OpenApiServer.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiServer.Extensions.set -> void
+Microsoft.OpenApi.OpenApiServer.Name.get -> string?
+Microsoft.OpenApi.OpenApiServer.Name.set -> void
+Microsoft.OpenApi.OpenApiServer.OpenApiServer() -> void
+Microsoft.OpenApi.OpenApiServer.OpenApiServer(Microsoft.OpenApi.OpenApiServer! server) -> void
+Microsoft.OpenApi.OpenApiServer.Url.get -> string?
+Microsoft.OpenApi.OpenApiServer.Url.set -> void
+Microsoft.OpenApi.OpenApiServer.Variables.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiServer.Variables.set -> void
+Microsoft.OpenApi.OpenApiServerExtensions
+Microsoft.OpenApi.OpenApiServerRules
+Microsoft.OpenApi.OpenApiServerVariable
+Microsoft.OpenApi.OpenApiServerVariable.Default.get -> string?
+Microsoft.OpenApi.OpenApiServerVariable.Default.set -> void
+Microsoft.OpenApi.OpenApiServerVariable.Description.get -> string?
+Microsoft.OpenApi.OpenApiServerVariable.Description.set -> void
+Microsoft.OpenApi.OpenApiServerVariable.Enum.get -> System.Collections.Generic.List?
+Microsoft.OpenApi.OpenApiServerVariable.Enum.set -> void
+Microsoft.OpenApi.OpenApiServerVariable.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiServerVariable.Extensions.set -> void
+Microsoft.OpenApi.OpenApiServerVariable.OpenApiServerVariable() -> void
+Microsoft.OpenApi.OpenApiServerVariable.OpenApiServerVariable(Microsoft.OpenApi.OpenApiServerVariable! serverVariable) -> void
+Microsoft.OpenApi.OpenApiServerVariable.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiServerVariable.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiServerVariable.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiServerVariable.SerializeAsV32(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.OpenApiSpecVersion
+Microsoft.OpenApi.OpenApiSpecVersion.OpenApi2_0 = 0 -> Microsoft.OpenApi.OpenApiSpecVersion
+Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0 = 1 -> Microsoft.OpenApi.OpenApiSpecVersion
+Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_1 = 2 -> Microsoft.OpenApi.OpenApiSpecVersion
+Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_2 = 3 -> Microsoft.OpenApi.OpenApiSpecVersion
+Microsoft.OpenApi.OpenApiTag
+Microsoft.OpenApi.OpenApiTag.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiTag!
+Microsoft.OpenApi.OpenApiTag.Description.get -> string?
+Microsoft.OpenApi.OpenApiTag.Description.set -> void
+Microsoft.OpenApi.OpenApiTag.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiTag.Extensions.set -> void
+Microsoft.OpenApi.OpenApiTag.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.OpenApiTag.ExternalDocs.set -> void
+Microsoft.OpenApi.OpenApiTag.Kind.get -> string?
+Microsoft.OpenApi.OpenApiTag.Kind.set -> void
+Microsoft.OpenApi.OpenApiTag.Name.get -> string?
+Microsoft.OpenApi.OpenApiTag.Name.set -> void
+Microsoft.OpenApi.OpenApiTag.OpenApiTag() -> void
+Microsoft.OpenApi.OpenApiTag.Parent.get -> Microsoft.OpenApi.OpenApiTagReference?
+Microsoft.OpenApi.OpenApiTag.Parent.set -> void
+Microsoft.OpenApi.OpenApiTag.Summary.get -> string?
+Microsoft.OpenApi.OpenApiTag.Summary.set -> void
+Microsoft.OpenApi.OpenApiTagReference
+Microsoft.OpenApi.OpenApiTagReference.CreateShallowCopy() -> Microsoft.OpenApi.IOpenApiTag!
+Microsoft.OpenApi.OpenApiTagReference.Description.get -> string?
+Microsoft.OpenApi.OpenApiTagReference.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiTagReference.ExternalDocs.get -> Microsoft.OpenApi.OpenApiExternalDocs?
+Microsoft.OpenApi.OpenApiTagReference.Kind.get -> string?
+Microsoft.OpenApi.OpenApiTagReference.Name.get -> string?
+Microsoft.OpenApi.OpenApiTagReference.OpenApiTagReference(string! referenceId, Microsoft.OpenApi.OpenApiDocument? hostDocument = null, string? externalResource = null) -> void
+Microsoft.OpenApi.OpenApiTagReference.Parent.get -> Microsoft.OpenApi.OpenApiTagReference?
+Microsoft.OpenApi.OpenApiTagReference.Summary.get -> string?
+Microsoft.OpenApi.OpenApiTagRules
+Microsoft.OpenApi.OpenApiTypeMapper
+Microsoft.OpenApi.OpenApiUnsupportedSpecVersionException
+Microsoft.OpenApi.OpenApiUnsupportedSpecVersionException.OpenApiUnsupportedSpecVersionException(string! specificationVersion) -> void
+Microsoft.OpenApi.OpenApiUnsupportedSpecVersionException.OpenApiUnsupportedSpecVersionException(string! specificationVersion, System.Exception! innerException) -> void
+Microsoft.OpenApi.OpenApiUnsupportedSpecVersionException.SpecificationVersion.get -> string!
+Microsoft.OpenApi.OpenApiUrlTreeNode
+Microsoft.OpenApi.OpenApiUrlTreeNode.AddAdditionalData(System.Collections.Generic.Dictionary!>! additionalData) -> void
+Microsoft.OpenApi.OpenApiUrlTreeNode.AdditionalData.get -> System.Collections.Generic.IDictionary!>!
+Microsoft.OpenApi.OpenApiUrlTreeNode.AdditionalData.set -> void
+Microsoft.OpenApi.OpenApiUrlTreeNode.Attach(Microsoft.OpenApi.OpenApiDocument! doc, string! label) -> void
+Microsoft.OpenApi.OpenApiUrlTreeNode.Attach(string! path, Microsoft.OpenApi.IOpenApiPathItem! pathItem, string! label) -> Microsoft.OpenApi.OpenApiUrlTreeNode!
+Microsoft.OpenApi.OpenApiUrlTreeNode.Children.get -> System.Collections.Generic.IDictionary!
+Microsoft.OpenApi.OpenApiUrlTreeNode.HasOperations(string! label) -> bool
+Microsoft.OpenApi.OpenApiUrlTreeNode.IsParameter.get -> bool
+Microsoft.OpenApi.OpenApiUrlTreeNode.Path.get -> string!
+Microsoft.OpenApi.OpenApiUrlTreeNode.Path.set -> void
+Microsoft.OpenApi.OpenApiUrlTreeNode.PathItems.get -> System.Collections.Generic.IDictionary!
+Microsoft.OpenApi.OpenApiUrlTreeNode.Segment.get -> string!
+Microsoft.OpenApi.OpenApiUrlTreeNode.WriteMermaid(System.IO.TextWriter! writer) -> void
+Microsoft.OpenApi.OpenApiValidator
+Microsoft.OpenApi.OpenApiValidator.AddError(Microsoft.OpenApi.OpenApiValidatorError! error) -> void
+Microsoft.OpenApi.OpenApiValidator.AddWarning(Microsoft.OpenApi.OpenApiValidatorWarning! warning) -> void
+Microsoft.OpenApi.OpenApiValidator.Errors.get -> System.Collections.Generic.IEnumerable!
+Microsoft.OpenApi.OpenApiValidator.OpenApiValidator(Microsoft.OpenApi.ValidationRuleSet! ruleSet) -> void
+Microsoft.OpenApi.OpenApiValidator.Warnings.get -> System.Collections.Generic.IEnumerable!
+Microsoft.OpenApi.OpenApiValidatorError
+Microsoft.OpenApi.OpenApiValidatorError.OpenApiValidatorError(string! ruleName, string! pointer, string! message) -> void
+Microsoft.OpenApi.OpenApiValidatorError.RuleName.get -> string!
+Microsoft.OpenApi.OpenApiValidatorError.RuleName.set -> void
+Microsoft.OpenApi.OpenApiValidatorWarning
+Microsoft.OpenApi.OpenApiValidatorWarning.OpenApiValidatorWarning(string! ruleName, string! pointer, string! message) -> void
+Microsoft.OpenApi.OpenApiValidatorWarning.RuleName.get -> string!
+Microsoft.OpenApi.OpenApiValidatorWarning.RuleName.set -> void
+Microsoft.OpenApi.OpenApiVisitorBase
+Microsoft.OpenApi.OpenApiVisitorBase.CurrentKeys.get -> Microsoft.OpenApi.CurrentKeys!
+Microsoft.OpenApi.OpenApiVisitorBase.OpenApiVisitorBase() -> void
+Microsoft.OpenApi.OpenApiVisitorBase.PathString.get -> string!
+Microsoft.OpenApi.OpenApiWalker
+Microsoft.OpenApi.OpenApiWalker.OpenApiWalker(Microsoft.OpenApi.OpenApiVisitorBase! visitor) -> void
+Microsoft.OpenApi.OpenApiWalker.Walk(Microsoft.OpenApi.OpenApiDocument? doc) -> void
+Microsoft.OpenApi.OpenApiWorkspace
+Microsoft.OpenApi.OpenApiWorkspace.AddDocumentId(string? key, System.Uri? value) -> void
+Microsoft.OpenApi.OpenApiWorkspace.BaseUrl.get -> System.Uri?
+Microsoft.OpenApi.OpenApiWorkspace.ComponentsCount() -> int
+Microsoft.OpenApi.OpenApiWorkspace.Contains(string! location) -> bool
+Microsoft.OpenApi.OpenApiWorkspace.GetDocumentId(string? key) -> System.Uri?
+Microsoft.OpenApi.OpenApiWorkspace.OpenApiWorkspace() -> void
+Microsoft.OpenApi.OpenApiWorkspace.OpenApiWorkspace(Microsoft.OpenApi.OpenApiWorkspace! workspace) -> void
+Microsoft.OpenApi.OpenApiWorkspace.OpenApiWorkspace(System.Uri! baseUrl) -> void
+Microsoft.OpenApi.OpenApiWorkspace.RegisterComponentForDocument(Microsoft.OpenApi.OpenApiDocument! openApiDocument, T componentToRegister, string! id) -> bool
+Microsoft.OpenApi.OpenApiWorkspace.RegisterComponents(Microsoft.OpenApi.OpenApiDocument! document) -> void
+Microsoft.OpenApi.OpenApiWorkspace.ResolveReference(string! location) -> T?
+Microsoft.OpenApi.OpenApiWriterAnyExtensions
+Microsoft.OpenApi.OpenApiWriterBase
+Microsoft.OpenApi.OpenApiWriterBase.CurrentScope() -> Microsoft.OpenApi.Scope?
+Microsoft.OpenApi.OpenApiWriterBase.EndScope(Microsoft.OpenApi.ScopeType type) -> Microsoft.OpenApi.Scope!
+Microsoft.OpenApi.OpenApiWriterBase.FlushAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.OpenApiWriterBase.IsArrayScope() -> bool
+Microsoft.OpenApi.OpenApiWriterBase.IsObjectScope() -> bool
+Microsoft.OpenApi.OpenApiWriterBase.IsTopLevelScope() -> bool
+Microsoft.OpenApi.OpenApiWriterBase.OpenApiWriterBase(System.IO.TextWriter! textWriter) -> void
+Microsoft.OpenApi.OpenApiWriterBase.OpenApiWriterBase(System.IO.TextWriter! textWriter, Microsoft.OpenApi.OpenApiWriterSettings? settings) -> void
+Microsoft.OpenApi.OpenApiWriterBase.Settings.get -> Microsoft.OpenApi.OpenApiWriterSettings!
+Microsoft.OpenApi.OpenApiWriterBase.Settings.set -> void
+Microsoft.OpenApi.OpenApiWriterBase.StartScope(Microsoft.OpenApi.ScopeType type) -> Microsoft.OpenApi.Scope!
+Microsoft.OpenApi.OpenApiWriterBase.VerifyCanWritePropertyName(string! name) -> void
+Microsoft.OpenApi.OpenApiWriterBase.Writer.get -> System.IO.TextWriter!
+Microsoft.OpenApi.OpenApiWriterException
+Microsoft.OpenApi.OpenApiWriterException.OpenApiWriterException() -> void
+Microsoft.OpenApi.OpenApiWriterException.OpenApiWriterException(string! message) -> void
+Microsoft.OpenApi.OpenApiWriterException.OpenApiWriterException(string! message, System.Exception? innerException) -> void
+Microsoft.OpenApi.OpenApiWriterExtensions
+Microsoft.OpenApi.OpenApiWriterSettings
+Microsoft.OpenApi.OpenApiWriterSettings.InlineExternalReferences.get -> bool
+Microsoft.OpenApi.OpenApiWriterSettings.InlineExternalReferences.set -> void
+Microsoft.OpenApi.OpenApiWriterSettings.InlineLocalReferences.get -> bool
+Microsoft.OpenApi.OpenApiWriterSettings.InlineLocalReferences.set -> void
+Microsoft.OpenApi.OpenApiWriterSettings.OpenApiWriterSettings() -> void
+Microsoft.OpenApi.OpenApiXml
+Microsoft.OpenApi.OpenApiXml.Extensions.get -> System.Collections.Generic.IDictionary?
+Microsoft.OpenApi.OpenApiXml.Extensions.set -> void
+Microsoft.OpenApi.OpenApiXml.Name.get -> string?
+Microsoft.OpenApi.OpenApiXml.Name.set -> void
+Microsoft.OpenApi.OpenApiXml.Namespace.get -> System.Uri?
+Microsoft.OpenApi.OpenApiXml.Namespace.set -> void
+Microsoft.OpenApi.OpenApiXml.NodeType.get -> Microsoft.OpenApi.OpenApiXmlNodeType?
+Microsoft.OpenApi.OpenApiXml.NodeType.set -> void
+Microsoft.OpenApi.OpenApiXml.OpenApiXml() -> void
+Microsoft.OpenApi.OpenApiXml.OpenApiXml(Microsoft.OpenApi.OpenApiXml! xml) -> void
+Microsoft.OpenApi.OpenApiXml.Prefix.get -> string?
+Microsoft.OpenApi.OpenApiXml.Prefix.set -> void
+Microsoft.OpenApi.OpenApiXmlNodeType
+Microsoft.OpenApi.OpenApiXmlNodeType.Attribute = 1 -> Microsoft.OpenApi.OpenApiXmlNodeType
+Microsoft.OpenApi.OpenApiXmlNodeType.Cdata = 3 -> Microsoft.OpenApi.OpenApiXmlNodeType
+Microsoft.OpenApi.OpenApiXmlNodeType.Element = 0 -> Microsoft.OpenApi.OpenApiXmlNodeType
+Microsoft.OpenApi.OpenApiXmlNodeType.None = 4 -> Microsoft.OpenApi.OpenApiXmlNodeType
+Microsoft.OpenApi.OpenApiXmlNodeType.Text = 2 -> Microsoft.OpenApi.OpenApiXmlNodeType
+Microsoft.OpenApi.OpenApiYamlWriter
+Microsoft.OpenApi.OpenApiYamlWriter.OpenApiYamlWriter(System.IO.TextWriter! textWriter) -> void
+Microsoft.OpenApi.OpenApiYamlWriter.OpenApiYamlWriter(System.IO.TextWriter! textWriter, Microsoft.OpenApi.OpenApiWriterSettings? settings) -> void
+Microsoft.OpenApi.OpenApiYamlWriter.UseLiteralStyle.get -> bool
+Microsoft.OpenApi.OpenApiYamlWriter.UseLiteralStyle.set -> void
+Microsoft.OpenApi.OperationSearch
+Microsoft.OpenApi.OperationSearch.OperationSearch(System.Func! predicate) -> void
+Microsoft.OpenApi.OperationSearch.SearchResults.get -> System.Collections.Generic.IList!
+Microsoft.OpenApi.ParameterLocation
+Microsoft.OpenApi.ParameterLocation.Cookie = 3 -> Microsoft.OpenApi.ParameterLocation
+Microsoft.OpenApi.ParameterLocation.Header = 1 -> Microsoft.OpenApi.ParameterLocation
+Microsoft.OpenApi.ParameterLocation.Path = 2 -> Microsoft.OpenApi.ParameterLocation
+Microsoft.OpenApi.ParameterLocation.Query = 0 -> Microsoft.OpenApi.ParameterLocation
+Microsoft.OpenApi.ParameterLocation.QueryString = 4 -> Microsoft.OpenApi.ParameterLocation
+Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.Cookie = 7 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.DeepObject = 6 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.Form = 2 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.Label = 1 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.Matrix = 0 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.PipeDelimited = 5 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.Simple = 3 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.ParameterStyle.SpaceDelimited = 4 -> Microsoft.OpenApi.ParameterStyle
+Microsoft.OpenApi.PathExpression
+Microsoft.OpenApi.PathExpression.Name.get -> string?
+Microsoft.OpenApi.PathExpression.PathExpression(string! name) -> void
+Microsoft.OpenApi.QueryExpression
+Microsoft.OpenApi.QueryExpression.Name.get -> string?
+Microsoft.OpenApi.QueryExpression.QueryExpression(string! name) -> void
+Microsoft.OpenApi.Reader.DefaultStreamLoader
+Microsoft.OpenApi.Reader.DefaultStreamLoader.DefaultStreamLoader(System.Net.Http.HttpClient! httpClient) -> void
+Microsoft.OpenApi.Reader.DefaultStreamLoader.LoadAsync(System.Uri! baseUrl, System.Uri! uri, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.Reader.JsonPointerExtensions
+Microsoft.OpenApi.Reader.OpenApiDiagnostic
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.AppendDiagnostic(Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnosticToAdd, string? fileNameToAdd = null) -> void
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.Errors.get -> System.Collections.Generic.IList!
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.Errors.set -> void
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.Format.get -> string?
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.Format.set -> void
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.OpenApiDiagnostic() -> void
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.SpecificationVersion.get -> Microsoft.OpenApi.OpenApiSpecVersion
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.SpecificationVersion.set -> void
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.Warnings.get -> System.Collections.Generic.IList!
+Microsoft.OpenApi.Reader.OpenApiDiagnostic.Warnings.set -> void
+Microsoft.OpenApi.Reader.OpenApiJsonReader
+Microsoft.OpenApi.Reader.OpenApiJsonReader.OpenApiJsonReader() -> void
+Microsoft.OpenApi.Reader.OpenApiJsonReader.Read(System.IO.MemoryStream! input, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings) -> Microsoft.OpenApi.Reader.ReadResult!
+Microsoft.OpenApi.Reader.OpenApiJsonReader.Read(System.Text.Json.Nodes.JsonNode! jsonNode, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings) -> Microsoft.OpenApi.Reader.ReadResult!
+Microsoft.OpenApi.Reader.OpenApiJsonReader.ReadAsync(System.IO.Stream! input, System.Uri! location, Microsoft.OpenApi.Reader.OpenApiReaderSettings! settings, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
+Microsoft.OpenApi.Reader.OpenApiJsonReader.ReadFragment(System.IO.MemoryStream! input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.OpenApiDocument! openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) -> T?
+Microsoft.OpenApi.Reader.OpenApiJsonReader.ReadFragment(System.Text.Json.Nodes.JsonNode! input, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.OpenApiDocument! openApiDocument, out Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnostic, Microsoft.OpenApi.Reader.OpenApiReaderSettings? settings = null) -> T?
+Microsoft.OpenApi.Reader.OpenApiModelFactory
+Microsoft.OpenApi.Reader.OpenApiReaderSettings
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.AddJsonReader() -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.AddMicrosoftExtensionParsers() -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.BaseUrl.get -> System.Uri?
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.BaseUrl.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.CustomExternalLoader.get -> Microsoft.OpenApi.IStreamLoader?
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.CustomExternalLoader.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.DefaultContentType.get -> System.Collections.Generic.List?
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.DefaultContentType.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.ExtensionParsers.get -> System.Collections.Generic.Dictionary!>?
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.ExtensionParsers.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.HttpClient.init -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.LeaveStreamOpen.get -> bool
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.LeaveStreamOpen.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.LoadExternalRefs.get -> bool
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.LoadExternalRefs.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.OpenApiReaderSettings() -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.Readers.get -> System.Collections.Generic.Dictionary!
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.Readers.init -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.RuleSet.get -> Microsoft.OpenApi.ValidationRuleSet!
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.RuleSet.set -> void
+Microsoft.OpenApi.Reader.OpenApiReaderSettings.TryAddReader(string! format, Microsoft.OpenApi.IOpenApiReader! reader) -> bool
+Microsoft.OpenApi.Reader.OpenApiVersionExtensionMethods
+Microsoft.OpenApi.Reader.ParsingContext
+Microsoft.OpenApi.Reader.ParsingContext.BaseUrl.get -> System.Uri?
+Microsoft.OpenApi.Reader.ParsingContext.BaseUrl.set -> void
+Microsoft.OpenApi.Reader.ParsingContext.DefaultContentType.get -> System.Collections.Generic.List?
+Microsoft.OpenApi.Reader.ParsingContext.DefaultContentType.set -> void
+Microsoft.OpenApi.Reader.ParsingContext.Diagnostic.get -> Microsoft.OpenApi.Reader.OpenApiDiagnostic!
+Microsoft.OpenApi.Reader.ParsingContext.EndObject() -> void
+Microsoft.OpenApi.Reader.ParsingContext.ExtensionParsers.get -> System.Collections.Generic.Dictionary!>?
+Microsoft.OpenApi.Reader.ParsingContext.ExtensionParsers.set -> void
+Microsoft.OpenApi.Reader.ParsingContext.GetFromTempStorage(string! key, object? scope = null) -> T?
+Microsoft.OpenApi.Reader.ParsingContext.GetLocation() -> string!
+Microsoft.OpenApi.Reader.ParsingContext.Parse(System.Text.Json.Nodes.JsonNode! jsonNode, System.Uri! location) -> Microsoft.OpenApi.OpenApiDocument!
+Microsoft.OpenApi.Reader.ParsingContext.ParseFragment(System.Text.Json.Nodes.JsonNode! jsonNode, Microsoft.OpenApi.OpenApiSpecVersion version, Microsoft.OpenApi.OpenApiDocument! openApiDocument) -> T?
+Microsoft.OpenApi.Reader.ParsingContext.ParsingContext(Microsoft.OpenApi.Reader.OpenApiDiagnostic! diagnostic) -> void
+Microsoft.OpenApi.Reader.ParsingContext.SetTempStorage(string! key, object? value, object? scope = null) -> void
+Microsoft.OpenApi.Reader.ParsingContext.StartObject(string! objectName) -> void
+Microsoft.OpenApi.Reader.ReadResult
+Microsoft.OpenApi.Reader.ReadResult.Deconstruct(out Microsoft.OpenApi.OpenApiDocument? document, out Microsoft.OpenApi.Reader.OpenApiDiagnostic? diagnostic) -> void
+Microsoft.OpenApi.Reader.ReadResult.Diagnostic.get -> Microsoft.OpenApi.Reader.OpenApiDiagnostic?
+Microsoft.OpenApi.Reader.ReadResult.Diagnostic.set -> void
+Microsoft.OpenApi.Reader.ReadResult.Document.get -> Microsoft.OpenApi.OpenApiDocument?
+Microsoft.OpenApi.Reader.ReadResult.Document.set -> void
+Microsoft.OpenApi.Reader.ReadResult.ReadResult() -> void
+Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Callback = 8 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Example = 3 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Header = 5 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Link = 7 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.MediaType = 11 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Parameter = 2 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.PathItem = 10 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.RequestBody = 4 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Response = 1 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Schema = 0 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.SecurityScheme = 6 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.ReferenceType.Tag = 9 -> Microsoft.OpenApi.ReferenceType
+Microsoft.OpenApi.RequestExpression
+Microsoft.OpenApi.RequestExpression.RequestExpression(Microsoft.OpenApi.SourceExpression! source) -> void
+Microsoft.OpenApi.RequestExpression.Source.get -> Microsoft.OpenApi.SourceExpression!
+Microsoft.OpenApi.ResponseExpression
+Microsoft.OpenApi.ResponseExpression.ResponseExpression(Microsoft.OpenApi.SourceExpression! source) -> void
+Microsoft.OpenApi.ResponseExpression.Source.get -> Microsoft.OpenApi.SourceExpression!
+Microsoft.OpenApi.RuntimeExpression
+Microsoft.OpenApi.RuntimeExpression.Equals(Microsoft.OpenApi.RuntimeExpression? other) -> bool
+Microsoft.OpenApi.RuntimeExpression.RuntimeExpression() -> void
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.Any.get -> System.Text.Json.Nodes.JsonNode?
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.Any.set -> void
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.Expression.get -> Microsoft.OpenApi.RuntimeExpression?
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.Expression.set -> void
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.RuntimeExpressionAnyWrapper() -> void
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.RuntimeExpressionAnyWrapper(Microsoft.OpenApi.RuntimeExpressionAnyWrapper! runtimeExpressionAnyWrapper) -> void
+Microsoft.OpenApi.RuntimeExpressionAnyWrapper.WriteValue(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+Microsoft.OpenApi.Scope
+Microsoft.OpenApi.Scope.IsInArray.get -> bool
+Microsoft.OpenApi.Scope.IsInArray.set -> void
+Microsoft.OpenApi.Scope.ObjectCount.get -> int
+Microsoft.OpenApi.Scope.ObjectCount.set -> void
+Microsoft.OpenApi.Scope.Scope(Microsoft.OpenApi.ScopeType type) -> void
+Microsoft.OpenApi.Scope.Type.get -> Microsoft.OpenApi.ScopeType
+Microsoft.OpenApi.ScopeType
+Microsoft.OpenApi.ScopeType.Array = 1 -> Microsoft.OpenApi.ScopeType
+Microsoft.OpenApi.ScopeType.Object = 0 -> Microsoft.OpenApi.ScopeType
+Microsoft.OpenApi.SearchResult
+Microsoft.OpenApi.SearchResult.CurrentKeys.get -> Microsoft.OpenApi.CurrentKeys?
+Microsoft.OpenApi.SearchResult.CurrentKeys.set -> void
+Microsoft.OpenApi.SearchResult.Operation.get -> Microsoft.OpenApi.OpenApiOperation?
+Microsoft.OpenApi.SearchResult.Operation.set -> void
+Microsoft.OpenApi.SearchResult.Parameters.get -> System.Collections.Generic.IList?
+Microsoft.OpenApi.SearchResult.Parameters.set -> void
+Microsoft.OpenApi.SearchResult.SearchResult() -> void
+Microsoft.OpenApi.SecuritySchemeType
+Microsoft.OpenApi.SecuritySchemeType.ApiKey = 0 -> Microsoft.OpenApi.SecuritySchemeType
+Microsoft.OpenApi.SecuritySchemeType.Http = 1 -> Microsoft.OpenApi.SecuritySchemeType
+Microsoft.OpenApi.SecuritySchemeType.MutualTLS = 4 -> Microsoft.OpenApi.SecuritySchemeType
+Microsoft.OpenApi.SecuritySchemeType.OAuth2 = 2 -> Microsoft.OpenApi.SecuritySchemeType
+Microsoft.OpenApi.SecuritySchemeType.OpenIdConnect = 3 -> Microsoft.OpenApi.SecuritySchemeType
+Microsoft.OpenApi.SourceExpression
+Microsoft.OpenApi.SourceExpression.SourceExpression(string? value) -> void
+Microsoft.OpenApi.SourceExpression.Value.get -> string?
+Microsoft.OpenApi.SpecialCharacterStringExtensions
+Microsoft.OpenApi.StatusCodeExpression
+Microsoft.OpenApi.StatusCodeExpression.StatusCodeExpression() -> void
+Microsoft.OpenApi.UrlExpression
+Microsoft.OpenApi.UrlExpression.UrlExpression() -> void
+Microsoft.OpenApi.ValidationContextExtensions
+Microsoft.OpenApi.ValidationRule
+Microsoft.OpenApi.ValidationRule.Name.get -> string!
+Microsoft.OpenApi.ValidationRule
+Microsoft.OpenApi.ValidationRule.ValidationRule(string! name, System.Action! validate) -> void
+Microsoft.OpenApi.ValidationRuleSet
+Microsoft.OpenApi.ValidationRuleSet.Add(System.Type! key, Microsoft.OpenApi.ValidationRule! rule) -> void
+Microsoft.OpenApi.ValidationRuleSet.Add(System.Type! key, System.Collections.Generic.List! rules) -> void
+Microsoft.OpenApi.ValidationRuleSet.Clear() -> void
+Microsoft.OpenApi.ValidationRuleSet.Contains(System.Type! key, Microsoft.OpenApi.ValidationRule! rule) -> bool
+Microsoft.OpenApi.ValidationRuleSet.ContainsKey(System.Type! key) -> bool
+Microsoft.OpenApi.ValidationRuleSet.Count.get -> int
+Microsoft.OpenApi.ValidationRuleSet.FindRules(System.Type! type) -> System.Collections.Generic.IList!
+Microsoft.OpenApi.ValidationRuleSet.GetEnumerator() -> System.Collections.Generic.IEnumerator!
+Microsoft.OpenApi.ValidationRuleSet.Remove(Microsoft.OpenApi.ValidationRule! rule) -> bool
+Microsoft.OpenApi.ValidationRuleSet.Remove(string! ruleName) -> void
+Microsoft.OpenApi.ValidationRuleSet.Remove(System.Type! key) -> bool
+Microsoft.OpenApi.ValidationRuleSet.Remove(System.Type! key, Microsoft.OpenApi.ValidationRule! rule) -> bool
+Microsoft.OpenApi.ValidationRuleSet.Rules.get -> System.Collections.Generic.IList!
+Microsoft.OpenApi.ValidationRuleSet.TryGetValue(System.Type! key, out System.Collections.Generic.List? rules) -> bool
+Microsoft.OpenApi.ValidationRuleSet.Update(System.Type! key, Microsoft.OpenApi.ValidationRule! newRule, Microsoft.OpenApi.ValidationRule! oldRule) -> bool
+Microsoft.OpenApi.ValidationRuleSet.ValidationRuleSet() -> void
+Microsoft.OpenApi.ValidationRuleSet.ValidationRuleSet(Microsoft.OpenApi.ValidationRuleSet! ruleSet) -> void
+Microsoft.OpenApi.ValidationRuleSet.ValidationRuleSet(System.Collections.Generic.Dictionary!>! rules) -> void
+override Microsoft.OpenApi.BodyExpression.Expression.get -> string!
+override Microsoft.OpenApi.CompositeExpression.Expression.get -> string!
+override Microsoft.OpenApi.FormattingStreamWriter.FormatProvider.get -> System.IFormatProvider!
+override Microsoft.OpenApi.HeaderExpression.Expression.get -> string!
+override Microsoft.OpenApi.JsonPointer.ToString() -> string!
+override Microsoft.OpenApi.JsonSchemaReference.SerializeAdditionalV31Properties(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.JsonSchemaReference.SerializeAdditionalV32Properties(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.JsonSchemaReference.SetAdditional31MetadataFromMapNode(System.Text.Json.Nodes.JsonObject! jsonObject) -> void
+override Microsoft.OpenApi.MethodExpression.Expression.get -> string!
+override Microsoft.OpenApi.OpenApiCallbackReference.CopyReference(Microsoft.OpenApi.BaseOpenApiReference! sourceReference) -> Microsoft.OpenApi.BaseOpenApiReference!
+override Microsoft.OpenApi.OpenApiCallbackReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiCallback! source) -> Microsoft.OpenApi.IOpenApiCallback!
+override Microsoft.OpenApi.OpenApiCallbackReference.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiError.ToString() -> string!
+override Microsoft.OpenApi.OpenApiExampleReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary!
+override Microsoft.OpenApi.OpenApiExampleReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiExample! source) -> Microsoft.OpenApi.IOpenApiExample!
+override Microsoft.OpenApi.OpenApiExampleReference.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiHeaderReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescription! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescription!
+override Microsoft.OpenApi.OpenApiHeaderReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiHeader! source) -> Microsoft.OpenApi.IOpenApiHeader!
+override Microsoft.OpenApi.OpenApiJsonWriter.BaseIndentation.get -> int
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteEndArray() -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteEndObject() -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteIndentation() -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteNull() -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WritePropertyName(string! name) -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteRaw(string! value) -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteStartArray() -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteStartObject() -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteValue(string! value) -> void
+override Microsoft.OpenApi.OpenApiJsonWriter.WriteValueSeparator() -> void
+override Microsoft.OpenApi.OpenApiLinkReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescription! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescription!
+override Microsoft.OpenApi.OpenApiLinkReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiLink! source) -> Microsoft.OpenApi.IOpenApiLink!
+override Microsoft.OpenApi.OpenApiLinkReference.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiMediaTypeReference.CopyReference(Microsoft.OpenApi.BaseOpenApiReference! sourceReference) -> Microsoft.OpenApi.BaseOpenApiReference!
+override Microsoft.OpenApi.OpenApiMediaTypeReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiMediaType! source) -> Microsoft.OpenApi.IOpenApiMediaType!
+override Microsoft.OpenApi.OpenApiMediaTypeReference.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiMediaTypeReference.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiParameterReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescription! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescription!
+override Microsoft.OpenApi.OpenApiParameterReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiParameter! source) -> Microsoft.OpenApi.IOpenApiParameter!
+override Microsoft.OpenApi.OpenApiPathItemReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary!
+override Microsoft.OpenApi.OpenApiPathItemReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiPathItem! source) -> Microsoft.OpenApi.IOpenApiPathItem!
+override Microsoft.OpenApi.OpenApiPathItemReference.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiReferenceWithDescription.SerializeAdditionalV31Properties(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiReferenceWithDescription.SerializeAdditionalV32Properties(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiReferenceWithDescription.SetAdditional31MetadataFromMapNode(System.Text.Json.Nodes.JsonObject! jsonObject) -> void
+override Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.SerializeAdditionalV31Properties(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.SerializeAdditionalV32Properties(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary.SetAdditional31MetadataFromMapNode(System.Text.Json.Nodes.JsonObject! jsonObject) -> void
+override Microsoft.OpenApi.OpenApiRequestBodyReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescription! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescription!
+override Microsoft.OpenApi.OpenApiRequestBodyReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiRequestBody! source) -> Microsoft.OpenApi.IOpenApiRequestBody!
+override Microsoft.OpenApi.OpenApiRequestBodyReference.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiResponseReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescriptionAndSummary!
+override Microsoft.OpenApi.OpenApiResponseReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiResponse! source) -> Microsoft.OpenApi.IOpenApiResponse!
+override Microsoft.OpenApi.OpenApiSchemaReference.CopyReference(Microsoft.OpenApi.JsonSchemaReference! sourceReference) -> Microsoft.OpenApi.JsonSchemaReference!
+override Microsoft.OpenApi.OpenApiSchemaReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiSchema! source) -> Microsoft.OpenApi.IOpenApiSchema!
+override Microsoft.OpenApi.OpenApiSchemaReference.SerializeAsV2(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiSchemaReference.SerializeAsV3(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiSchemaReference.SerializeAsV31(Microsoft.OpenApi.IOpenApiWriter! writer) -> void
+override Microsoft.OpenApi.OpenApiSecuritySchemeReference.CopyReference(Microsoft.OpenApi.OpenApiReferenceWithDescription! sourceReference) -> Microsoft.OpenApi.OpenApiReferenceWithDescription!
+override Microsoft.OpenApi.OpenApiSecuritySchemeReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiSecurityScheme! source) -> Microsoft.OpenApi.IOpenApiSecurityScheme!
+override Microsoft.OpenApi.OpenApiTagReference.CopyReference(Microsoft.OpenApi.BaseOpenApiReference! sourceReference) -> Microsoft.OpenApi.BaseOpenApiReference!
+override Microsoft.OpenApi.OpenApiTagReference.CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.IOpenApiTag! source) -> Microsoft.OpenApi.IOpenApiTag!
+override Microsoft.OpenApi.OpenApiTagReference.Target.get -> Microsoft.OpenApi.IOpenApiTag?
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiCallback! callback) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiExample! example) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiExtensible! openApiExtensible) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiExtension! openApiExtension) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiHeader! header) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiLink! link) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiMediaType! mediaType) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiParameter! parameter) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiPathItem! pathItem) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiRequestBody! requestBody) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiResponse! response) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiSchema! schema) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.IOpenApiSecurityScheme! securityScheme) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiComponents! components) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiContact! contact) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiDocument! doc) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiEncoding! encoding) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiExternalDocs! externalDocs) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiInfo! info) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiLicense! license) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiOAuthFlow! openApiOAuthFlow) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiOperation! operation) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiPaths! paths) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiResponses! response) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiSecurityRequirement! securityRequirement) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiServer! server) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiServerVariable! serverVariable) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(Microsoft.OpenApi.OpenApiTag! tag) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! callbacks) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! examples) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! headers) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! links) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! content) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! encodings) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary! serverVariables) -> void
+override Microsoft.OpenApi.OpenApiValidator.Visit(System.Collections.Generic.IDictionary