[Multiple languages] properties are generated as nullable/optional, despite required/nullable usage in OAS schema
- Dominant language
- C#
- Stars
- 3.8k
- Forks
- 333
- Avg merge
- 16h 29m
- Merged PRs (30d)
- 116
Description
Kiota ignores the usage of `required`/`nullable` in OAS schemas. C# properties are always generated as nullable. This results in unneeded noisy squiggles, as shown [here](https://github.com/microsoft/kiota/issues/3846#issuecomment-1844249797).
NSwag does a better job, by performing the following translation (using the `/GenerateNullableReferenceTypes:true` switch):
- OAS non-required + nullable: C# nullable
- OAS required + nullable: C# nullable
- OAS non-required + non-nullable: C# non-nullable, unless combined with the `/GenerateOptionalPropertiesAsNullable:true` switch
- OAS required + non-nullable: C# non-nullable
Additionally, NSwag adds `[Newtonsoft.Json.JsonProperty(Required = ..., , NullValueHandling = ...)]` on the generated properties, which results in client-side serialization errors (thus avoiding a server roundtrip on invalid input).
Example component schema
```json
"exampleComponent": {
"required": [
"requiredNonNullableReferenceType",
"requiredNullableReferenceType",
"requiredNullableValueType",
"requiredValueType"
],
"type": "object",
"properties": {
"nonNullableReferenceType": {
"type": "string"
},
"requiredNonNullableReferenceType": {
"type": "string"
},
"nullableReferenceType": {
"type": "string",
"nullable": true
},
"requiredNullableReferenceType": {
"type": "string",
"nullable": true
},
"valueType": {
"type": "integer",
"format": "int32"
},
"requiredValueType": {
"type": "integer",
"format": "int32"
},
"nullableValueType": {
"type": "integer",
"format": "int32",
"nullable": true
},
"requiredNullableValueType": {
"type": "integer",
"format": "int32",
"nullable": true
}
},
"additionalProperties": false
}
```
The motivation for this behavior in Kiota is provided [here](https://github.com/microsoft/kiota/issues/3846#issuecomment-1845391214) and [here](https://github.com/microsoft/kiota/issues/3846#issuecomment-1847168478). I find it unfortunate that _correct_ server implementations have to suffer from this.
Please upvote this issue if you'd like Kiota to respect the `required`/`nullable` usage in your OAS.
Contributor guide
Assessment
This issue has not been assessed yet.