diff --git a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj
index 8373654b3..781deb6ee 100644
--- a/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj
+++ b/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj
@@ -10,7 +10,7 @@
Microsoft
Microsoft.OpenApi.Readers
Microsoft.OpenApi.Readers
- 1.6.0
+ 1.6.1
OpenAPI.NET Readers for JSON and YAML documents
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
diff --git a/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj b/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj
index ad6989d05..c7ab75af4 100644
--- a/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj
+++ b/src/Microsoft.OpenApi.Workbench/Microsoft.OpenApi.Workbench.csproj
@@ -7,7 +7,7 @@
true
-
+
all
diff --git a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
index 44a556cae..622e7e7b6 100644
--- a/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
+++ b/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj
@@ -11,7 +11,7 @@
Microsoft
Microsoft.OpenApi
Microsoft.OpenApi
- 1.6.0
+ 1.6.1
.NET models with JSON and YAML writers for OpenAPI specification
© Microsoft Corporation. All rights reserved.
OpenAPI .NET
diff --git a/src/Microsoft.OpenApi/Models/OpenApiContact.cs b/src/Microsoft.OpenApi/Models/OpenApiContact.cs
index 352697bf2..93cb11bca 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiContact.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiContact.cs
@@ -46,7 +46,7 @@ public OpenApiContact() { }
public OpenApiContact(OpenApiContact contact)
{
Name = contact?.Name ?? Name;
- Url = contact?.Url != null ? new Uri(contact.Url.OriginalString) : null;
+ Url = contact?.Url != null ? new Uri(contact.Url.OriginalString, UriKind.RelativeOrAbsolute) : null;
Email = contact?.Email ?? Email;
Extensions = contact?.Extensions != null ? new Dictionary(contact.Extensions) : null;
}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
index 9ad3b9e55..345f07d59 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
@@ -32,7 +32,7 @@ public class OpenApiExternalDocs : IOpenApiSerializable, IOpenApiExtensible
///
/// Parameter-less constructor
///
- public OpenApiExternalDocs() {}
+ public OpenApiExternalDocs() { }
///
/// Initializes a copy of an object
@@ -40,7 +40,7 @@ public OpenApiExternalDocs() {}
public OpenApiExternalDocs(OpenApiExternalDocs externalDocs)
{
Description = externalDocs?.Description ?? Description;
- Url = externalDocs?.Url != null ? new Uri(externalDocs.Url.OriginalString) : null;
+ Url = externalDocs?.Url != null ? new Uri(externalDocs.Url.OriginalString, UriKind.RelativeOrAbsolute) : null;
Extensions = externalDocs?.Extensions != null ? new Dictionary(externalDocs.Extensions) : null;
}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs
index 1a8d1a4d8..866515835 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs
@@ -32,7 +32,7 @@ public class OpenApiLicense : IOpenApiSerializable, IOpenApiExtensible
///
/// Parameterless constructor
///
- public OpenApiLicense() {}
+ public OpenApiLicense() { }
///
/// Initializes a copy of an object
@@ -40,7 +40,7 @@ public OpenApiLicense() {}
public OpenApiLicense(OpenApiLicense license)
{
Name = license?.Name ?? Name;
- Url = license?.Url != null ? new Uri(license.Url.OriginalString) : null;
+ Url = license?.Url != null ? new Uri(license.Url.OriginalString, UriKind.RelativeOrAbsolute) : null;
Extensions = license?.Extensions != null ? new Dictionary(license.Extensions) : null;
}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
index c6f91fbd8..9c12fb5a9 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
@@ -44,16 +44,16 @@ public class OpenApiOAuthFlow : IOpenApiSerializable, IOpenApiExtensible
///
/// Parameterless constructor
///
- public OpenApiOAuthFlow() {}
+ public OpenApiOAuthFlow() { }
///
/// Initializes a copy of an object
///
public OpenApiOAuthFlow(OpenApiOAuthFlow oAuthFlow)
{
- AuthorizationUrl = oAuthFlow?.AuthorizationUrl != null ? new Uri(oAuthFlow.AuthorizationUrl.OriginalString) : null;
- TokenUrl = oAuthFlow?.TokenUrl != null ? new Uri(oAuthFlow.TokenUrl.OriginalString) : null;
- RefreshUrl = oAuthFlow?.RefreshUrl != null ? new Uri(oAuthFlow.RefreshUrl.OriginalString) : null;
+ AuthorizationUrl = oAuthFlow?.AuthorizationUrl != null ? new Uri(oAuthFlow.AuthorizationUrl.OriginalString, UriKind.RelativeOrAbsolute) : null;
+ TokenUrl = oAuthFlow?.TokenUrl != null ? new Uri(oAuthFlow.TokenUrl.OriginalString, UriKind.RelativeOrAbsolute) : null;
+ RefreshUrl = oAuthFlow?.RefreshUrl != null ? new Uri(oAuthFlow.RefreshUrl.OriginalString, UriKind.RelativeOrAbsolute) : null;
Scopes = oAuthFlow?.Scopes != null ? new Dictionary(oAuthFlow.Scopes) : null;
Extensions = oAuthFlow?.Extensions != null ? new Dictionary(oAuthFlow.Extensions) : null;
}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
index 513b865df..0176ea1d9 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
@@ -536,6 +536,11 @@ internal void SerializeAsV2(
}
target.SerializeAsV2WithoutReference(writer, parentRequiredProperties, propertyName);
+
+ if (Reference != null)
+ {
+ settings.LoopDetector.PopLoop();
+ }
}
///
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
index 913e70441..616a6a022 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
@@ -77,7 +77,7 @@ public class OpenApiSecurityScheme : IOpenApiSerializable, IOpenApiReferenceable
///
/// Parameterless constructor
///
- public OpenApiSecurityScheme() {}
+ public OpenApiSecurityScheme() { }
///
/// Initializes a copy of object
@@ -91,7 +91,7 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme)
Scheme = securityScheme?.Scheme ?? Scheme;
BearerFormat = securityScheme?.BearerFormat ?? BearerFormat;
Flows = securityScheme?.Flows != null ? new(securityScheme?.Flows) : null;
- OpenIdConnectUrl = securityScheme?.OpenIdConnectUrl != null ? new Uri(securityScheme.OpenIdConnectUrl.OriginalString) : null;
+ OpenIdConnectUrl = securityScheme?.OpenIdConnectUrl != null ? new Uri(securityScheme.OpenIdConnectUrl.OriginalString, UriKind.RelativeOrAbsolute) : null;
Extensions = securityScheme?.Extensions != null ? new Dictionary(securityScheme.Extensions) : null;
UnresolvedReference = securityScheme?.UnresolvedReference ?? UnresolvedReference;
Reference = securityScheme?.Reference != null ? new(securityScheme?.Reference) : null;
@@ -107,8 +107,8 @@ public void SerializeAsV3(IOpenApiWriter writer)
throw Error.ArgumentNull(nameof(writer));
}
-
- if (Reference != null)
+
+ if (Reference != null)
{
Reference.SerializeAsV3(writer);
return;
diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
index e35db421b..fc9274aea 100644
--- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
+++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
@@ -28,7 +28,7 @@
-
+
all
diff --git a/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs b/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs
index bfaa3da51..1a15ea3b4 100644
--- a/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Writers/OpenApiYamlWriterTests.cs
@@ -618,7 +618,12 @@ public void WriteInlineRecursiveSchemav2()
type: object
properties:
children:
- $ref: '#/definitions/thing'
+ type: object
+ properties:
+ children:
+ $ref: '#/definitions/thing'
+ related:
+ type: integer
related:
type: integer";
// Component schemas that are there due to cycles are still inlined because the items they reference may not exist in the components because they don't have cycles.