当前位置: 首页 > 知识库问答 >
问题:

C#NSwag和具有枚举的swagger-codecen

蒋奇
2023-03-14

我有一个.Net Core v2.1 Web API,它使用NSwag生成其Swagger Json。

我有一个这样的反应模型-

public class LoginResponse
{
    public LoginResult LoginResult { get; set; }
}

public enum LoginResult
{
    AwaitingEmailConfirmation = 0,
    Locked = 1,
    Failed = 2,
    Success = 3
}

生成Swagger JSON的-

"definitions":{  
"LoginResponse":{  
   "type":"object",
   "additionalProperties":false,
   "required":[  
      "loginResult"
   ],
   "properties":{  
      "loginResult":{  
         "$ref":"#/definitions/LoginResult"
      }
   }
},
"LoginResult":{  
   "type":"integer",
   "description":"",
   "x-enumNames":[  
      "AwaitingEmailConfirmation",
      "Locked",
      "Failed",
      "Success"
   ],
   "enum":[  
      0,
      1,
      2,
      3
   ]
},

当在JSON上运行swagger代码时,我在我的IO. Swagger项目中获得了以下LoginResault模型,用于C#(选择了目标框架5.0)-

[JsonConverter(typeof(StringEnumConverter))]

public enum LoginResult
{

    /// <summary>
    /// Enum _0 for value: 0
    /// </summary>
    [EnumMember(Value = "0")]
    _0 = 1,

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

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

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

}

有人可以帮助描述我如何让枚举生成与IO. Swagger中的原始LoginResultModel相同的名称等。Swagger使用swagger-codecen生成的客户端代码?

共有2个答案

赵俊远
2023-03-14

使用Nswag 13.10.7和.netcore 3.1

Startup.ConfigureServices 编辑为类似

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers()
                .AddJsonOptions(options =>
                {
                    options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                });
             ...
         }
蒲昊苍
2023-03-14

您可以在启动时使用此代码

services.AddMvc(option => option.EnableEndpointRouting = false).AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        });
 类似资料:
  • 我的api如下所示: 对于查询,我们只想允许查询枚举中列出的某些属性,如下所示: 我加了 在启动阶段。cs,但这不适用于默认值,我得到以下生成的虚张声势,默认值为0而不是字符串: 如何使默认值显示为字符串?

  • 枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类

  • 问题内容: 考虑: 有没有办法使这种简单枚举的思想适应这种情况?(请参阅此问题)理想情况下,就像在Java中一样,我想将它们全部塞入一个类中。 Java模型: 问题答案: Python 3.4具有新的Enum数据类型(已反向移植为,并增强为1)。无论和2轻松支持您的使用情况: [ py2 / 3] [ py2 / 3或3.4+] 并在使用中: 1披露:我是Python stdlib ,backpo

  • 本文向大家介绍C和C++11之enum枚举的具体使用方法,包括了C和C++11之enum枚举的具体使用方法的使用技巧和注意事项,需要的朋友参考一下 一、前言 由于C++项目中用了相对比较多的枚举(enum),正常情况下,枚举变量都是占用一个整形类型的大小,但是项目中枚举(enum)只需要使用到一个字节的大小,因为是在嵌入式设备上执行的代码,资源比较少,那么如果枚举都是按照int型大小来使用的话,这

  • 我的Rest API中有一个字段(在++中实现),它是一组封闭的数值。例如,员工等级,它可以是以下值之一:。而不是,则不能为每个值定义匹配字符串。 我正在尝试获得生成的文档,以便为这些值提供一个数字枚举。我尝试了以下方法: > 使用以下属性定义整数:。没有显示任何枚举,只是在将的类型更改为之后。因此不幸的是,只能与String参数一起工作,而我不希望我的模型是这样的。employeeRank必须是