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 1/3] 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 e36fc9565bce42916eb7bf64d1f74d491dd1f407 Mon Sep 17 00:00:00 2001
From: Niels van Dijk
Date: Thu, 18 Dec 2025 10:04:33 +0100
Subject: [PATCH 2/3] 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 3/3] 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