swagger-codegen icon indicating copy to clipboard operation
swagger-codegen copied to clipboard

[Aspnetcore] - Newtonsoft json serializer not works in .net8

Open engpauloandrade opened this issue 1 year ago • 1 comments

Description

When updating my project to the .NET8 version, Newtonsfot.Json serialization stopped working. To solve this problem, I had to put a global variable in the Startup.cs class:

            services.AddControllers()
                    .AddNewtonsoftJson(options =>
                    {
                        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                        options.SerializerSettings.Converters.Add(new StringEnumConverter());
                    });
Template aspnetcore used to enum
        /// <summary>
        /// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
        /// </summary>
        {{#description}}
        /// <value>{{{description}}}</value>
        {{/description}}
        {{#allowableValues}}{{#enumVars}}{{#-first}}{{#isString}}[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]{{/isString}}{{/-first}}{{/enumVars}}{{/allowableValues}}
        public enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}
        {
            {{#allowableValues}}{{#enumVars}}
            /// <summary>
            /// Enum {{name}} for {{{value}}}
            /// </summary>
            {{#isString}}[EnumMember(Value = "{{{value}}}")]{{/isString}}
            {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}},
            {{/-last}}{{/enumVars}}{{/allowableValues}}
        }
Swagger-codegen version

Last version

Swagger declaration file content or url
Code used exemple
        [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
        public enum StatusEnum
        {
            
            /// <summary>
            /// Enum AtivoEnum for Ativo
            /// </summary>
            [EnumMember(Value = "Ativo")]
            AtivoEnum = 1,
            
            /// <summary>
            /// Enum UtilizadoEnum for Utilizado
            /// </summary>
            [EnumMember(Value = "Utilizado")]
            UtilizadoEnum = 2,
            
            /// <summary>
            /// Enum CanceladoEnum for Cancelado
            /// </summary>
            [EnumMember(Value = "Cancelado")]
            CanceladoEnum = 3
        }

        /// <summary>
        /// Situação da recuperação da senha.
        /// </summary>
        /// <value>Situação da recuperação da senha.</value>
        [DataMember(Name="Status")]
        public StatusEnum? Status { get; set; }
For example, in the code above, when the Status object is serialized using the JSON format, the value of the "status" field is converted to the string "1" instead of the string "Ativo" like before.

engpauloandrade avatar Mar 08 '24 18:03 engpauloandrade

Can you let me know what are the packages installed?

MdaslamArcadis avatar Jul 18 '24 12:07 MdaslamArcadis