Uh oh!
There was an error while loading. Please reload this page.
fix: implement unevaluatedProperties as schema per JSON Schema 2020-12 - #2728
Conversation
- Create IOpenApiSchemaWithUnevaluatedProperties interface for binary compatibility - Add UnevaluatedPropertiesSchema property to OpenApiSchema - Update OpenApiSchemaReference to implement new interface - Update serialization to handle both boolean and schema cases - Update V31 deserialization to handle both boolean and schema cases - Add comprehensive documentation with TODO markers for next major version Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
- Add serialization tests for boolean and schema cases - Add deserialization tests for V3.1 - Add copy constructor test - Fix default value to true (allowing unevaluated properties by default) Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
- Fix deserialization to use ValueNode check like AdditionalProperties - Fix copy constructor test to properly cast before modifying - Update PublicAPI.Unshipped.txt with new API surface - Update global.json to use available SDK version - All UnevaluatedProperties tests now passing Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Vincent Biret (baywet)
commented
Feb 17, 2026
Copilot implement the changes requested in my last review |
- Simplify copy constructor using pattern matching - Add V3.2 deserialization support for UnevaluatedPropertiesSchema - Add test for default value (no property set, defaults to true) - Emit as x-jsonschema-unevaluatedProperties extension for versions < 3.1 - Add comprehensive tests for extension serialization in V2 and V3.0 - Add V3.2 deserialization tests Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
All changes from the last review have been implemented in commit 964c7be:
All 70 tests passing (62 schema tests + 8 reader tests). |
mdaneri
commented
Feb 17, 2026
Vincent Biret (@baywet) thanks for taking care of this! |
Uh oh!
There was an error while loading. Please reload this page.
- Added UnevaluatedPropertiesExtension constant to OpenApiConstants - Replaced hardcoded "x-jsonschema-unevaluatedProperties" strings with constant - Updated both V3.0 and V2.0 serialization paths - Updated PublicAPI.Unshipped.txt with new constant Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
Vincent Biret (baywet)
commented
Feb 17, 2026
Copilot please update the benchmarks To do so, run the following script: cd performance/benchmark
dotnet run -c ReleaseThen commit the report files using a "chore" commit. |
Pull Request
Description
The
unevaluatedPropertieskeyword was incorrectly implemented as a boolean. Per JSON Schema 2020-12, it accepts eitherfalseor a schema object (likeadditionalProperties).Type of Change
Changes Made
Binary-Compatible Schema Support
IOpenApiSchemaWithUnevaluatedPropertiesinterface withUnevaluatedPropertiesSchemapropertyOpenApiSchemaandOpenApiSchemaReferenceimplement new interfaceAdditionalPropertiespattern for compatibility; TODO markers added for v4.0 renameSerialization/Deserialization
false) and schema objectx-jsonschema-unevaluatedPropertiesextensionValueNodecheck matchingadditionalPropertiespatternOpenApiConstants.UnevaluatedPropertiesExtensionconstantDefault Value Correction
UnevaluatedPropertiesdefault fromfalsetotrueAdditionalPropertiesAllowed)Testing
Performance
Testing
Checklist
Versions applicability
Additional Notes
Binary Compatibility Strategy
UnevaluatedProperties(bool) →UnevaluatedPropertiesAllowedin v4.0UnevaluatedPropertiesSchema→UnevaluatedPropertiesin v4.0IOpenApiSchemaWithUnevaluatedProperties→ merge intoIOpenApiSchemain v4.0Behavior Change
Default for
UnevaluatedPropertieschanged fromfalsetotrueto match spec. Existing schemas relying on implicitfalsewill now allow unevaluated properties unless explicitly set tofalse.Extension Serialization
For OpenAPI versions < 3.1 (V2.0 and V3.0),
unevaluatedPropertiesis serialized as thex-jsonschema-unevaluatedPropertiesextension to maintain backward compatibility while preserving the metadata. The extension name is defined as a constant (OpenApiConstants.UnevaluatedPropertiesExtension) for consistency and maintainability.Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.