Swagger-codegen: C#-Aufzählungen, die entweder mit Werten oder Namen gerendert werden, nicht mit beidem

Erstellt am 13. Juni 2017  ·  3Kommentare  ·  Quelle: swagger-api/swagger-codegen

Beschreibung

Hallo alle,

Wir haben einen Legacy-Code in unserem Produkt, wo wir eine Aufzählung haben, die bei 1 beginnt:

public enum AccountStateEnum
{
        Live = 1,
        Trial = 2,
        Internal = 3,
        Development = 4,
        Archived = 5,
        Disabled = 6
}

Wir möchten, dass Swagger die Aufzählung mit Zeichenfolgen generiert, also aktivieren wir die SwaggerConfig-Einstellung „DescribeAllEnumsAsStrings“.

Dies erzeugt die Aufzählung wie folgt:

        /// <summary>
        /// Gets or Sets AccountState
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountStateEnum
        {

            /// <summary>
            /// Enum Live for "Live"
            /// </summary>
            [EnumMember(Value = "Live")]
            Live,

            /// <summary>
            /// Enum Trial for "Trial"
            /// </summary>
            [EnumMember(Value = "Trial")]
            Trial,

            /// <summary>
            /// Enum Internal for "Internal"
            /// </summary>
            [EnumMember(Value = "Internal")]
            Internal,

            /// <summary>
            /// Enum Development for "Development"
            /// </summary>
            [EnumMember(Value = "Development")]
            Development,

            /// <summary>
            /// Enum Archived for "Archived"
            /// </summary>
            [EnumMember(Value = "Archived")]
            Archived,

            /// <summary>
            /// Enum Disabled for "Disabled"
            /// </summary>
            [EnumMember(Value = "Disabled")]
            Disabled
        }

Was bei uns leider nicht funktioniert - da 'Live' gleich 1 sein muss.

Wenn wir die Einstellung aus SwaggerConfig entfernen, werden die Enum-Werte wie folgt gerendert:

        /// <summary>
        /// Gets or Sets AccountState
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountStateEnum
        {

            /// <summary>
            /// Enum NUMBER_1 for 1
            /// </summary>
            [EnumMember(Value = "1")]
            NUMBER_1 = 1,

            /// <summary>
            /// Enum NUMBER_2 for 2
            /// </summary>
            [EnumMember(Value = "2")]
            NUMBER_2 = 2,

            /// <summary>
            /// Enum NUMBER_3 for 3
            /// </summary>
            [EnumMember(Value = "3")]
            NUMBER_3 = 3,

            /// <summary>
            /// Enum NUMBER_4 for 4
            /// </summary>
            [EnumMember(Value = "4")]
            NUMBER_4 = 4,

            /// <summary>
            /// Enum NUMBER_5 for 5
            /// </summary>
            [EnumMember(Value = "5")]
            NUMBER_5 = 5,

            /// <summary>
            /// Enum NUMBER_6 for 6
            /// </summary>
            [EnumMember(Value = "6")]
            NUMBER_6 = 6
        }

Die Nummern sind richtig zugeordnet, die Namen sind jedoch nicht enthalten!

Gibt es eine Möglichkeit, das Beste aus beiden Welten zu bekommen?

Swagger-Codegen-Version

2.3.0

Für die Generierung verwendete Befehlszeile

Nichts Besonderes an der von uns verwendeten Befehlszeile!

Schritte zum Reproduzieren
  1. Erstellen Sie eine Aufzählung mit den zugewiesenen Werten beginnend bei 1.
  2. Generieren Sie Code mit aktiviertem DescribeAllEnumsAsStrings.
  3. Dem generierten Code werden keine Werte zugewiesen.
  4. DescribeAllEnumsAsStrings deaktivieren.
  5. Werte werden zugewiesen, Namen gehen jedoch verloren.

Hilfreichster Kommentar

Ich habe das gleiche Problem.

Das ist meine Definition

  ProofOfOwnership:
    type: integer
    enum:
      - 1
      - 2
      - 4
    x-enumNames:
      - Manufacturer's Certificate of Origin
      - Title issued in another State/Jurisdiction
      - Minnesota Title

Das bekomme ich

    /// <summary>
    /// Defines ProofOfOwnership
    /// </summary>
    [JsonConverter(typeof(StringEnumConverter))]
    public enum ProofOfOwnership
    {

        /// <summary>
        /// Enum _1 for "1"
        /// </summary>
        [EnumMember(Value = "1")]
        _1 = 1,

        /// <summary>
        /// Enum _2 for "2"
        /// </summary>
        [EnumMember(Value = "2")]
        _2 = 2,

        /// <summary>
        /// Enum _4 for "4"
        /// </summary>
        [EnumMember(Value = "4")]
        _4 = 3
    }

Das erwarte ich

    /// <summary>
    /// Defines ProofOfOwnership
    /// </summary>
    public enum ProofOfOwnership
    {

        /// <summary>
        /// Enum _1 for "1"
        /// </summary>
        [EnumMember(Value = "1")]
        ManufacturersCertificateOfOrigin = 1,

        /// <summary>
        /// Enum _2 for "2"
        /// </summary>
        [EnumMember(Value = "2")]
        TitleIssuedInAnotherStateJurisdiction = 2,

        /// <summary>
        /// Enum _4 for "4"
        /// </summary>
        [EnumMember(Value = "4")]
        MinnesotaTitle = 4
    }

Alle 3 Kommentare

Ich habe das gleiche Problem.

Das ist meine Definition

  ProofOfOwnership:
    type: integer
    enum:
      - 1
      - 2
      - 4
    x-enumNames:
      - Manufacturer's Certificate of Origin
      - Title issued in another State/Jurisdiction
      - Minnesota Title

Das bekomme ich

    /// <summary>
    /// Defines ProofOfOwnership
    /// </summary>
    [JsonConverter(typeof(StringEnumConverter))]
    public enum ProofOfOwnership
    {

        /// <summary>
        /// Enum _1 for "1"
        /// </summary>
        [EnumMember(Value = "1")]
        _1 = 1,

        /// <summary>
        /// Enum _2 for "2"
        /// </summary>
        [EnumMember(Value = "2")]
        _2 = 2,

        /// <summary>
        /// Enum _4 for "4"
        /// </summary>
        [EnumMember(Value = "4")]
        _4 = 3
    }

Das erwarte ich

    /// <summary>
    /// Defines ProofOfOwnership
    /// </summary>
    public enum ProofOfOwnership
    {

        /// <summary>
        /// Enum _1 for "1"
        /// </summary>
        [EnumMember(Value = "1")]
        ManufacturersCertificateOfOrigin = 1,

        /// <summary>
        /// Enum _2 for "2"
        /// </summary>
        [EnumMember(Value = "2")]
        TitleIssuedInAnotherStateJurisdiction = 2,

        /// <summary>
        /// Enum _4 for "4"
        /// </summary>
        [EnumMember(Value = "4")]
        MinnesotaTitle = 4
    }

Dasselbe Problem für mich. Ich verwende die HttpStatusCode-Aufzählung.

Gleiches Problem von mir, ist es möglich, es bald zu beheben?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen