Skip to content

Fix numeric format with pattern quirk - infer type from format for all numeric types#869

Merged
christianhelle merged 6 commits into
mainfrom
copilot/fix-int32-serialization-bug
Jan 26, 2026
Merged

Fix numeric format with pattern quirk - infer type from format for all numeric types#869
christianhelle merged 6 commits into
mainfrom
copilot/fix-int32-serialization-bug

Conversation

Copilot AI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

Description:

OpenAPI 3.0.4 specs generated by Microsoft.AspNetCore.OpenApi in .NET 10 omit the type field for numeric properties when a pattern is present, providing only format and pattern. NSwag interprets missing type as object, generating incorrect C# properties.

Added pre-processing in CSharpClientGeneratorFactory to infer the correct JsonObjectType from format fields when type is unset, before NSwag processes schemas. This fix supports all OpenAPI 3.1.0 numeric data types:

  • Integer formats: int32, int64JsonObjectType.Integer
  • Number formats: float, doubleJsonObjectType.Number

Changes:

  • CSharpClientGeneratorFactory.cs: New FixMissingTypesWithIntegerFormat() method processes all schemas (components, parameters, request/response bodies) to set type from format for all numeric types
  • Int32FormatWithPatternTests.cs: Test coverage validating int generation instead of object
  • NumericFormatWithPatternTests.cs: Test coverage validating float, double, and int64 generation instead of object

Example OpenAPI Specification:

openapi: 3.0.4
info:
  version: '1.0.0'
  title: 'Sensor Data API'
paths:
  /sensor:
    get:
      operationId: 'getSensorData'
      responses:
        '200':
          description: 'Success'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SensorData'
components:
  schemas:
    SensorData:
      type: object
      properties:
        temperature:
          pattern: '^-?\\d+\\.\\d+$'
          format: float
        humidity:
          pattern: '^-?\\d+\\.\\d+$'
          format: double
        pressure:
          pattern: '^-?(?:0|[1-9]\\d*)$'
          format: int64

Example generated Refit interface (Before):

public partial class SensorData
{
    [JsonPropertyName("temperature")]
    public object Temperature { get; set; }  // ❌ Wrong type

    [JsonPropertyName("humidity")]
    public object Humidity { get; set; }  // ❌ Wrong type

    [JsonPropertyName("pressure")]
    public object Pressure { get; set; }  // ❌ Wrong type
}

Example generated Refit interface (After):

public partial class SensorData
{
    [JsonPropertyName("temperature")]
    public float Temperature { get; set; }  // ✅ Correct type

    [JsonPropertyName("humidity")]
    public double Humidity { get; set; }  // ✅ Correct type

    [JsonPropertyName("pressure")]
    public long Pressure { get; set; }  // ✅ Correct type
}
Original prompt

This section details on the original issue you should resolve

<issue_title>format: int32 quirk => Serializes to "object" when open api spec contains pattern</issue_title>
<issue_description>Describe the bug
I have set up the basic "WeatherForecast" example API in Net 10, using Microsoft.AspNetCore.OpenApi to generate a specification with Version 3.0.4.. The WeatherForecast DTO contains two integer values:

public class WeatherForecast
{
  public DateOnly Date { get; set; }

  public int TemperatureC { get; set; }

  public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

  public string? Summary { get; set; }
}

These are serialized to this format:

    "WeatherForecast": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "temperatureC": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "temperatureF": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "summary": {
            "type": "string",
            "nullable": true
          }
        }
      }

When running refitter, the properties are generated as object instead:

public partial class WeatherForecast
{

  [JsonPropertyName("date")]
  [JsonConverter(typeof(DateFormatConverter))]
  public System.DateTimeOffset Date { get; set; }

  [JsonPropertyName("temperatureC")]
  public object TemperatureC { get; set; }

  [JsonPropertyName("temperatureF")]
  public object TemperatureF { get; set; }

  [JsonPropertyName("summary")]
  public string Summary { get; set; }

  private IDictionary<string, object> _additionalProperties;

  [JsonExtensionData]
  public IDictionary<string, object> AdditionalProperties
  {
    get { return _additionalProperties ?? (_additionalProperties = new Dictionary<string, object>()); }
    set { _additionalProperties = value; }
  }

}

Worth mentioning: When targeting OpenApi 3.1 in Microsoft.AspNetCore.OpenApi the generated spec looks like this:

  "WeatherForecast": {
    "type": "object",
    "properties": {
      "date": {
        "type": "string",
        "format": "date"
      },
      "temperatureC": {
        "pattern": "^-?(?:0|[1-9]\\d*)$",
        "type": [
          "integer",
          "string"
        ],
        "format": "int32"
      },
      "temperatureF": {
        "pattern": "^-?(?:0|[1-9]\\d*)$",
        "type": [
          "integer",
          "string"
        ],
        "format": "int32"
      },
      "summary": {
        "type": [
          "null",
          "string"
        ]
      }
    }
  }
```</issue_description>

## Comments on the Issue (you are @copilot in this section)

<comments>
<comment_new><author>@christianhelle</author><body>
@rm-code thanks for taking the time to bring this

I unfortunately just piggy-back on NSwag for the generating the models

Let's keep it open for now. If NSwag fixes the issue on their side then I will update the NSwag packages then hopefully it resolves this issue</body></comment_new>
<comment_new><author>@christianhelle</author><body>
@rm-code I'll try and set a CoPilot SWE agent to this task and see if it can find a workaround</body></comment_new>
</comments>

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@coderabbitai

coderabbitai Bot commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI changed the title [WIP] Fix int32 quirk in OpenAPI spec serialization Fix int32 format with pattern quirk - infer integer type from format Jan 14, 2026
Copilot AI requested a review from christianhelle January 14, 2026 08:40
Comment thread src/Refitter.Core/CSharpClientGeneratorFactory.cs
Comment thread src/Refitter.Core/CSharpClientGeneratorFactory.cs
@christianhelle

Copy link
Copy Markdown
Owner

@copilot implement the suggestions @rm-code from this thread and this thread regarding including the other numerical data types.

Copilot AI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor Author

@copilot implement the suggestions @rm-code from this thread and [this thread](https://github.com/christianhelle/refitter/...

Extended the fix to include all OpenAPI numeric data types (float, double, int64) as specified in the OpenAPI 3.1.0 specification. The FixSchemaTypeFromFormat() method now handles:

  • Integer formats: int32, int64JsonObjectType.Integer
  • Number formats: float, doubleJsonObjectType.Number

Added comprehensive test coverage in NumericFormatWithPatternTests class to validate all numeric formats work correctly.

Commits: 0e4133c, 6ce6f78

Copilot AI changed the title Fix int32 format with pattern quirk - infer integer type from format Fix numeric format with pattern quirk - infer type from format for all numeric types Jan 14, 2026
@christianhelle
christianhelle force-pushed the copilot/fix-int32-serialization-bug branch from 6ce6f78 to 8d5cdca Compare January 15, 2026 14:17
@codecov

codecov Bot commented Jan 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.30%. Comparing base (4c5b53b) to head (8ea8a21).
⚠️ Report is 11 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #869   +/-   ##
=======================================
  Coverage   93.30%   93.30%           
=======================================
  Files          23       23           
  Lines        1389     1389           
=======================================
  Hits         1296     1296           
  Misses         46       46           
  Partials       47       47           
Flag Coverage Δ
unittests 93.30% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@christianhelle
christianhelle marked this pull request as ready for review January 15, 2026 21:12
Copilot AI review requested due to automatic review settings January 15, 2026 21:12

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a critical bug where OpenAPI 3.0.4 specifications generated by Microsoft.AspNetCore.OpenApi in .NET 10 omit the type field for numeric properties when a pattern is present. The fix infers the correct type from the format field before NSwag processes schemas, preventing properties from being incorrectly generated as object instead of their proper numeric types (int, long, float, double).

Changes:

  • Added FixMissingTypesWithIntegerFormat() method to pre-process all schemas and infer missing types from format fields
  • Added comprehensive test coverage for int32, int64, float, and double format inference
  • Added try-catch for cleanup errors in test to improve test stability

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated 5 comments.

File Description
src/Refitter.Core/CSharpClientGeneratorFactory.cs Implements schema pre-processing logic to infer JsonObjectType from format fields (int32/int64 → Integer, float/double → Number) when type is unset
src/Refitter.Tests/Examples/Int32FormatWithPatternTests.cs Adds test coverage for int32 and int64 formats with pattern, plus float and double in a separate test class
src/Refitter.Tests/WriteRefitterSettingsFileTests.cs Wraps cleanup in try-catch to prevent test failures from directory cleanup errors
src/Refitter.Tests/Examples/UsePolymorphicSerializationAndCustomTemplatesTests.cs Removes trailing whitespace

Comment on lines +149 to +164
private void FixSchemaTypeFromFormat(JsonSchema schema)
{
// If type is not set but format indicates a numeric type (int32, int64, float, double), set the type based on format
if ((schema.Type == JsonObjectType.None || schema.Type == JsonObjectType.Null) &&
!string.IsNullOrEmpty(schema.Format))
{
if (schema.Format == "int32" || schema.Format == "int64")
{
schema.Type = JsonObjectType.Integer;
}
else if (schema.Format == "float" || schema.Format == "double")
{
schema.Type = JsonObjectType.Number;
}
}
}

Copilot AI Jan 15, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The format string comparisons should use case-insensitive comparison or be normalized to lowercase. The OpenAPI specification doesn't mandate specific casing for format values, and some generators might use different cases (e.g., "Float" vs "float"). Consider using schema.Format.Equals("int32", StringComparison.OrdinalIgnoreCase) for robustness.

Copilot uses AI. Check for mistakes.
}
}

public class NumericFormatWithPatternTests

Copilot AI Jan 15, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The class NumericFormatWithPatternTests should be in its own file. Following C# conventions and the pattern used in this repository, each test class should have its own file. This test class should be moved to a separate file named NumericFormatWithPatternTests.cs.

Copilot uses AI. Check for mistakes.
Comment on lines +72 to +104
foreach (var path in document.Paths)
{
if (path.Value == null) continue;

foreach (var operation in path.Value.Values)
{
if (operation == null) continue;

foreach (var parameter in operation.Parameters)
{
FixSchemaTypeFromFormat(parameter.ActualSchema);
}

if (operation.RequestBody?.Content != null)
{
foreach (var content in operation.RequestBody.Content.Values)
{
ProcessSchemaForMissingTypes(content.Schema);
}
}

foreach (var response in operation.Responses.Values)
{
if (response.Content != null)
{
foreach (var content in response.Content.Values)
{
ProcessSchemaForMissingTypes(content.Schema);
}
}
}
}
}

Copilot AI Jan 15, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This foreach loop implicitly filters its target sequence - consider filtering the sequence explicitly using '.Where(...)'.

Copilot uses AI. Check for mistakes.
Comment on lines +76 to +103
foreach (var operation in path.Value.Values)
{
if (operation == null) continue;

foreach (var parameter in operation.Parameters)
{
FixSchemaTypeFromFormat(parameter.ActualSchema);
}

if (operation.RequestBody?.Content != null)
{
foreach (var content in operation.RequestBody.Content.Values)
{
ProcessSchemaForMissingTypes(content.Schema);
}
}

foreach (var response in operation.Responses.Values)
{
if (response.Content != null)
{
foreach (var content in response.Content.Values)
{
ProcessSchemaForMissingTypes(content.Schema);
}
}
}
}

Copilot AI Jan 15, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This foreach loop implicitly filters its target sequence - consider filtering the sequence explicitly using '.Where(...)'.

Copilot uses AI. Check for mistakes.
Comment on lines +93 to +102
foreach (var response in operation.Responses.Values)
{
if (response.Content != null)
{
foreach (var content in response.Content.Values)
{
ProcessSchemaForMissingTypes(content.Schema);
}
}
}

Copilot AI Jan 15, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This foreach loop implicitly filters its target sequence - consider filtering the sequence explicitly using '.Where(...)'.

Copilot uses AI. Check for mistakes.
@christianhelle christianhelle added enhancement New feature, bug fix, or request .NET Pull requests that contain changes to .NET code labels Jan 26, 2026
Copilot AI and others added 5 commits January 26, 2026 14:13
Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>
Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>
…c type inference

Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>
Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>
@christianhelle
christianhelle force-pushed the copilot/fix-int32-serialization-bug branch from 05ae51d to ab8c3ba Compare January 26, 2026 13:14
…nTests and clean up Int32FormatWithPatternTests
@christianhelle
christianhelle force-pushed the copilot/fix-int32-serialization-bug branch from ab8c3ba to 8ea8a21 Compare January 26, 2026 13:26
@sonarqubecloud

Copy link
Copy Markdown

@christianhelle
christianhelle merged commit 44d46fe into main Jan 26, 2026
12 checks passed
@christianhelle
christianhelle deleted the copilot/fix-int32-serialization-bug branch January 26, 2026 13:51
hwinther pushed a commit to hwinther/test that referenced this pull request May 6, 2026
Updated [refitter](https://github.com/christianhelle/refitter) from
1.7.1 to 2.0.0.

<details>
<summary>Release notes</summary>

_Sourced from [refitter's
releases](https://github.com/christianhelle/refitter/releases)._

## 2.0.0

## What's Changed

* Fix numeric format with pattern quirk - infer type from format for all
numeric types by @​Copilot in
christianhelle/refitter#869
* Read group documentation from document tags. by @​DJ4ddi in
christianhelle/refitter#887
* Fix null reference and XML escaping in XmlDocumentationGenerator by
@​Copilot in christianhelle/refitter#890
* Fix build workflow: add dotnet restore before dotnet msbuild in
Prepare step by @​Copilot in
christianhelle/refitter#892
christianhelle/refitter#895
* Fix MSBuild workflow by @​christianhelle in
christianhelle/refitter#898
* Add support for generating a single client from multiple OpenAPI
specifications by @​Copilot in
christianhelle/refitter#904
* Migrate from Microsoft.OpenApi.Readers 1.x to Microsoft.OpenApi 3.x by
@​vgmello in christianhelle/refitter#907
* Improve Smoke Tests execution time by @​christianhelle in
christianhelle/refitter#915
* Fix #​580: Nullable strings marked correctly by @​christianhelle in
christianhelle/refitter#921
* Fix #​672: MultipleInterfaces ByTag method naming scoped per-interface
by @​christianhelle in
christianhelle/refitter#922
* Fix #​635: Refactor source generator to use context.AddSource() by
@​christianhelle in christianhelle/refitter#923
* Add custom format mappings configuration by @​christianhelle in
christianhelle/refitter#927
* Fix multipart form-data parameter extraction by @​christianhelle in
christianhelle/refitter#928
christianhelle/refitter#911
christianhelle/refitter#902
* Fix smoke tests: --interface-only variant missing using directive for
contract types by @​Copilot in
christianhelle/refitter#933
* Fix SonarCloud Code Quality Issues by @​Copilot in
christianhelle/refitter#932
* Add debug logging for source generator when searching for .refitter
files by @​codymullins in
christianhelle/refitter#743
* Fix: Base type not generated for types using oneOf with discriminator
by @​Copilot in christianhelle/refitter#906
* Add option for Method Level Authorization header attribute by
@​Roflincopter in christianhelle/refitter#897
* Fix PR #​897 review feedback and add comprehensive bearer auth tests
by @​christianhelle in
christianhelle/refitter#936
* Fix numeric suffix added to interface method names in ByTag mode by
@​Copilot in christianhelle/refitter#914
* Improve OpenAPI parse + codegen throughput by removing avoidable
allocations and repeated regex work by @​Copilot in
christianhelle/refitter#937
* Move [JsonConverter] from enum properties to enum types by
@​christianhelle in christianhelle/refitter#938
* Fix broken CLI tool help text by @​christianhelle in
christianhelle/refitter#940
* Improve code coverage to >90% by @​christianhelle in
christianhelle/refitter#941
* Microsoft.OpenApi v3.4 by @​christianhelle in
christianhelle/refitter#945
* Add Unicode support for XML doc comment generation by @​christianhelle
in christianhelle/refitter#948
* Add PropertyNamingPolicy support for JSON property naming by
@​christianhelle in christianhelle/refitter#969
christianhelle/refitter#966
* Fix recursive schema stack overflows by @​christianhelle in
christianhelle/refitter#971
* Made Header Parameters for Security Schemes safe to use as C# variable
name by @​smoerijf in
christianhelle/refitter#977
* Enhance schema alias handling and property name generation by
@​christianhelle in christianhelle/refitter#996
* Verify alias handling and sanitize PascalCase properties by
@​christianhelle in christianhelle/refitter#997
* Harden .refitter settings deserialization and output path handling by
@​christianhelle in christianhelle/refitter#1000
* Special-case the default .refitter filename before deriving
OutputFilename by @​coderabbitai[bot] in
christianhelle/refitter#1002
* [v2.0 audit] Fix pre-release regressions from #​1057 by
@​christianhelle in christianhelle/refitter#1064
* Resolve high-severity audit findings from #​1057 by @​christianhelle
in christianhelle/refitter#1067
* [v2.0 audit] Close remaining verified #​1057 regressions by
@​christianhelle in christianhelle/refitter#1070
* Harden generation flows by @​christianhelle in
christianhelle/refitter#1071
* Breaking changes and Migration Guide for v2.0.0 by @​christianhelle in
christianhelle/refitter#1009
* Handle equivalent duplicate schemas in multi-spec merge by
@​christianhelle in christianhelle/refitter#1076
* Tighten warning handling across Refitter builds by @​christianhelle in
christianhelle/refitter#1079
* Fix default solution path and update .NET version in VS Code config by
@​christianhelle in christianhelle/refitter#1082
* Fix docker smoke tests by @​christianhelle in
christianhelle/refitter#1081
* Sanitize malformed schema type names without renaming clean schemas by
@​christianhelle in christianhelle/refitter#1085

 ... (truncated)

## 1.7.3

## What's Changed
* Add support for systems running only .NET 10.0 (without .NET 8.0 or
9.0) in Refitter.MSBuild by @​christianhelle in
christianhelle/refitter#882
* Update to return HttpResponseMessage for file downloads by @​frogcrush
in christianhelle/refitter#877

## New Contributors
* @​frogcrush made their first contribution in
christianhelle/refitter#877

**Full Changelog**:
christianhelle/refitter@1.7.2...1.7.3

## 1.7.2

**Implemented enhancements:**

- Improve Immutable Records ergonomics
[\#​844](christianhelle/refitter#844)
- Omit certain operation headers and include all others
[\#​840](christianhelle/refitter#840)
- Create .refitter settings file as part of output
[\#​859](christianhelle/refitter#859) by
@[christianhelle
- Fix integerType enum deserialization issue
[\#​855](christianhelle/refitter#855)
([christianhelle](https://github.com/christianhelle))
- support custom nswag template directory \#​844
[\#​854](christianhelle/refitter#854) by
@​kmc059000
- Fix missing method parameter XML code-documentation
[\#​850](christianhelle/refitter#850)
([christianhelle](https://github.com/christianhelle))

**Fixed bugs:**

- integerType parsing in settings file fails
[\#​851](christianhelle/refitter#851)
- CS1573 : Method parameter has no matching XML comment
[\#​846](christianhelle/refitter#846)

**Merged pull requests:**

- docs: add frogcrush as a contributor for code
[\#​878](christianhelle/refitter#878)
([allcontributors[bot]](https://github.com/apps/allcontributors))
- Migrate solution files from .sln to .slnx format
[\#​876](christianhelle/refitter#876)
([Copilot](https://github.com/apps/copilot-swe-agent))
- Fix issue with randomly failing tests to due parallel execution
[\#​872](christianhelle/refitter#872)
([christianhelle](https://github.com/christianhelle))
- chore\(deps\): update dependency tunit to 1.9.2
[\#​863](christianhelle/refitter#863)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.7.7
[\#​862](christianhelle/refitter#862)
([renovate[bot]](https://github.com/apps/renovate))
- Add unit tests for WriteRefitterSettingsFile functionality
[\#​860](christianhelle/refitter#860)
([Copilot](https://github.com/apps/copilot-swe-agent))
- chore\(deps\): update dependency ruby to v4
[\#​858](christianhelle/refitter#858)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.6.28
[\#​857](christianhelle/refitter#857)
([renovate[bot]](https://github.com/apps/renovate))
- docs: add 0x2badc0de as a contributor for bug
[\#​856](christianhelle/refitter#856)
([allcontributors[bot]](https://github.com/apps/allcontributors))
- chore\(deps\): update dependency swashbuckle.aspnetcore to 10.1.0
[\#​853](christianhelle/refitter#853)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.6.0
[\#​852](christianhelle/refitter#852)
([renovate[bot]](https://github.com/apps/renovate))
- docs: add lilinus as a contributor for code
[\#​849](christianhelle/refitter#849)
([allcontributors[bot]](https://github.com/apps/allcontributors))
- chore\(deps\): update dependency ruby to v3.4.8
[\#​845](christianhelle/refitter#845)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.5.70
[\#​837](christianhelle/refitter#837)
([renovate[bot]](https://github.com/apps/renovate))


**Full Changelog**:
christianhelle/refitter@1.7.1...1.7.2

Commits viewable in [compare
view](christianhelle/refitter@1.7.1...2.0.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=refitter&package-manager=nuget&previous-version=1.7.1&new-version=2.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
vgmello pushed a commit to vgmello/momentum that referenced this pull request May 10, 2026
Updated [Refitter.MSBuild](https://github.com/christianhelle/refitter)
from 1.7.3 to 2.0.0.

<details>
<summary>Release notes</summary>

_Sourced from [Refitter.MSBuild's
releases](https://github.com/christianhelle/refitter/releases)._

## 2.0.0

## What's Changed

* Fix numeric format with pattern quirk - infer type from format for all
numeric types by @​Copilot in
christianhelle/refitter#869
* Read group documentation from document tags. by @​DJ4ddi in
christianhelle/refitter#887
* Fix null reference and XML escaping in XmlDocumentationGenerator by
@​Copilot in christianhelle/refitter#890
* Fix build workflow: add dotnet restore before dotnet msbuild in
Prepare step by @​Copilot in
christianhelle/refitter#892
christianhelle/refitter#895
* Fix MSBuild workflow by @​christianhelle in
christianhelle/refitter#898
* Add support for generating a single client from multiple OpenAPI
specifications by @​Copilot in
christianhelle/refitter#904
* Migrate from Microsoft.OpenApi.Readers 1.x to Microsoft.OpenApi 3.x by
@​vgmello in christianhelle/refitter#907
* Improve Smoke Tests execution time by @​christianhelle in
christianhelle/refitter#915
* Fix #​580: Nullable strings marked correctly by @​christianhelle in
christianhelle/refitter#921
* Fix #​672: MultipleInterfaces ByTag method naming scoped per-interface
by @​christianhelle in
christianhelle/refitter#922
* Fix #​635: Refactor source generator to use context.AddSource() by
@​christianhelle in christianhelle/refitter#923
* Add custom format mappings configuration by @​christianhelle in
christianhelle/refitter#927
* Fix multipart form-data parameter extraction by @​christianhelle in
christianhelle/refitter#928
christianhelle/refitter#911
christianhelle/refitter#902
* Fix smoke tests: --interface-only variant missing using directive for
contract types by @​Copilot in
christianhelle/refitter#933
* Fix SonarCloud Code Quality Issues by @​Copilot in
christianhelle/refitter#932
* Add debug logging for source generator when searching for .refitter
files by @​codymullins in
christianhelle/refitter#743
* Fix: Base type not generated for types using oneOf with discriminator
by @​Copilot in christianhelle/refitter#906
* Add option for Method Level Authorization header attribute by
@​Roflincopter in christianhelle/refitter#897
* Fix PR #​897 review feedback and add comprehensive bearer auth tests
by @​christianhelle in
christianhelle/refitter#936
* Fix numeric suffix added to interface method names in ByTag mode by
@​Copilot in christianhelle/refitter#914
* Improve OpenAPI parse + codegen throughput by removing avoidable
allocations and repeated regex work by @​Copilot in
christianhelle/refitter#937
* Move [JsonConverter] from enum properties to enum types by
@​christianhelle in christianhelle/refitter#938
* Fix broken CLI tool help text by @​christianhelle in
christianhelle/refitter#940
* Improve code coverage to >90% by @​christianhelle in
christianhelle/refitter#941
* Microsoft.OpenApi v3.4 by @​christianhelle in
christianhelle/refitter#945
* Add Unicode support for XML doc comment generation by @​christianhelle
in christianhelle/refitter#948
* Add PropertyNamingPolicy support for JSON property naming by
@​christianhelle in christianhelle/refitter#969
christianhelle/refitter#966
* Fix recursive schema stack overflows by @​christianhelle in
christianhelle/refitter#971
* Made Header Parameters for Security Schemes safe to use as C# variable
name by @​smoerijf in
christianhelle/refitter#977
* Enhance schema alias handling and property name generation by
@​christianhelle in christianhelle/refitter#996
* Verify alias handling and sanitize PascalCase properties by
@​christianhelle in christianhelle/refitter#997
* Harden .refitter settings deserialization and output path handling by
@​christianhelle in christianhelle/refitter#1000
* Special-case the default .refitter filename before deriving
OutputFilename by @​coderabbitai[bot] in
christianhelle/refitter#1002
* [v2.0 audit] Fix pre-release regressions from #​1057 by
@​christianhelle in christianhelle/refitter#1064
* Resolve high-severity audit findings from #​1057 by @​christianhelle
in christianhelle/refitter#1067
* [v2.0 audit] Close remaining verified #​1057 regressions by
@​christianhelle in christianhelle/refitter#1070
* Harden generation flows by @​christianhelle in
christianhelle/refitter#1071
* Breaking changes and Migration Guide for v2.0.0 by @​christianhelle in
christianhelle/refitter#1009
* Handle equivalent duplicate schemas in multi-spec merge by
@​christianhelle in christianhelle/refitter#1076
* Tighten warning handling across Refitter builds by @​christianhelle in
christianhelle/refitter#1079
* Fix default solution path and update .NET version in VS Code config by
@​christianhelle in christianhelle/refitter#1082
* Fix docker smoke tests by @​christianhelle in
christianhelle/refitter#1081
* Sanitize malformed schema type names without renaming clean schemas by
@​christianhelle in christianhelle/refitter#1085

 ... (truncated)

Commits viewable in [compare
view](christianhelle/refitter@1.7.3...2.0.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Refitter.MSBuild&package-manager=nuget&previous-version=1.7.3&new-version=2.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature, bug fix, or request .NET Pull requests that contain changes to .NET code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

format: int32 quirk => Serializes to "object" when open api spec contains pattern

4 participants