swagger-api / swagger-api/swagger-codegen
Csharp Enums with integer values ignore values in Swagger spec
Nobody has claimed this yet.
- Dominant language
- Mustache
- Stars
- 17.8k
- Forks
- 6k
- PR merge metrics
- No merged PRs in 30d
Description
Description
Enums generated in C# always use 1,2,3,4.. for the underlying integer value, even if the Swagger Spec has specific values
Swagger-codegen version
whatever app.swaggerhub.com usues
Swagger declaration file content or url
"speed": {
"title": "Speed",
"required": [
"label",
"value"
],
"type": "object",
"properties": {
"label": {
"type": "string",
"enum": [
"1200 bps",
"2400 bps",
"4800 bps",
"9600 bps",
"19.2 kbps",
"38.4 kbps",
"57.6 kbps",
"115.2 kbps"
]
},
"value": {
"type": "integer",
"enum": [
1200,
2400,
4800,
9600,
19200,
38400,
57600,
115200
]
}
},
"x-nullable": true
},
"family": {
"title": "Family",
"required": [
"label",
"value"
],
"type": "object",
"properties": {
"label": {
"type": "string",
"enum": [
"IPv4",
"IPv6"
]
},
"value": {
"type": "integer",
"enum": [
4,
6
]
}
},
"readOnly": true
},
Code Generated
superfluous code omitted.
Also omitted and a separate bug: a recent change now sees all enums made into classes which don't work. I can regex my way out of that but the incorrect values require manual intervention.
[JsonConverter(typeof(StringEnumConverter))]
public enum LabelEnum
{
[EnumMember(Value = "1200 bps")]
_1200bps = 1,
[EnumMember(Value = "2400 bps")]
_2400bps = 2,
[EnumMember(Value = "4800 bps")]
_4800bps = 3,
[EnumMember(Value = "9600 bps")]
_9600bps = 4,
[EnumMember(Value = "19.2 kbps")]
_192kbps = 5,
[EnumMember(Value = "38.4 kbps")]
_384kbps = 6,
[EnumMember(Value = "57.6 kbps")]
_576kbps = 7,
[EnumMember(Value = "115.2 kbps")]
_1152kbps = 8
}
[JsonConverter(typeof(StringEnumConverter))]
public enum LabelEnum
{
[EnumMember(Value = "IPv4")]
IPv4 = 1,
[EnumMember(Value = "IPv6")]
IPv6 = 2
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The payload names no files, tests, or entry points; begin by tracing the C# enum-generation path for the supplied Swagger declarations. Done means generated enum members preserve the declared integer values, including 1200, 2400, 4, and 6, rather than sequential values.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100