dotnet / aspnetcore

ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.
https://asp.net
MIT License
35.56k stars 10.05k forks source link

OpenApi generation creates NullableOf version of structs when null is allowed? #59056

Open Markz878 opened 1 week ago

Markz878 commented 1 week ago

Not sure if this is a question, bug report or API proposal, but I was pretty surprised when I tried to switch from Swagger to .NET 9 OpenApi generation, and saw that it generates these NullableOfXXX versions of structs if the API has any endpoints where the struct is nullable in input or output objects. What is the purpose of them?

This makes it harder to migrate from Swagger api generation to this, because we have auto-generated the Typescript schema objects and this would need a lot of changes in the app's TS signatures.

I'm not an OpenApi expert, but couldn't this be handled by using oneOf or anyOf? Or can this be somehow disabled using the OpenApi configuration? This doesn't happen with classes, why are structs handled differently?

Atulin commented 5 days ago

I'm having the same issue. Switching from Swagger generated a bunch of NullableOf, IEnumerableOf, DictionaryOf and other types of this kind, instead of having them inlined. The worst offender are probably enums and collections of primitives. I really don't need NullableOfMyEnum and IEnumerableOfInt64 when just { "$ref": "#/components/schemas/MyEnum", "nullable": true } would suffice.

ClementCHA commented 5 days ago

I'm also having the same issue. Fun part is that, if a model is using nullable Propriety AND an other model using the same propriety but non nullable this time, it will add it twice in the json as NullableOfProperty & Property