C# Swashbuckle-在swagger文档中将字符串视为枚举

C# Swashbuckle-在swagger文档中将字符串视为枚举,c#,enums,swagger,swagger-ui,swashbuckle,C#,Enums,Swagger,Swagger Ui,Swashbuckle,我正在使用FluentValidation,我只希望从FluentValidator接收自定义错误。这就是为什么请求类中的所有属性都是字符串。但是,我也希望有更好的枚举类型文档 这是我的请求示例: public class AddNewPaymentRequest { [EnumDataType(typeof(PaymentStatus))] public string PaymentStatus { get; set; } public string Id

我正在使用FluentValidation,我只希望从FluentValidator接收自定义错误。这就是为什么请求类中的所有属性都是字符串。但是,我也希望有更好的枚举类型文档

这是我的请求示例:

 public class AddNewPaymentRequest
 {
     [EnumDataType(typeof(PaymentStatus))]
     public string PaymentStatus { get; set; }

     public string Id { get; set; }
 }
和样本枚举:

 public enum PaymentStatus
 {
     Unknown,
     New,
     Pending,
     Completed
 }
和控制器:

[HttpPost]
public async Task<ActionResult> PostAsync([FromBody] AddNewPaymentRequest request)
{
   ...
}
[HttpPost]
公共异步任务

预期结果:


有没有可能以这种方式配置Swashback?

我想我们讨论的是.NET核心

如果您觉得合适,可以将其明确定义为enum而不是string

 public class AddNewPaymentRequest
 {
     //[EnumDataType(typeof(PaymentStatus))]
     //public string PaymentStatus { get; set; }

     public PaymentStatus PaymentStatus { get; set; }

     public string Id { get; set; }
 }
然后您可以定义SwaggerGen如何处理枚举

 services.AddSwaggerGen(c => {c.DescribeAllEnumsAsStrings(); } );
如果在api上接收/发送数据时遇到序列化/反序列化枚举(由Newtonsoft.Json提供)问题,您可以了解更多有关转换的信息(如有必要)


请注意,这些枚举的ToString()可能会导致不同的字符串(带/不带下划线)

Swagger仅支持
RequiredAttribute
ObsoleteAttribute
元数据
(用于外部类)。 所以除了写这样的东西,没有办法描述被接受的价值观:


///允许的值是……

您能够解析它吗?或者您遵循了下面的答案?不是的,我想尝试用int而不是strings来解决这个问题。有没有办法用int来解决这个问题?Swashback的方法descripbeAllenumsasstrings()已经过时了。您应该配置您的序列化程序,斯威格将自动使用它。
 [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
 public enum PaymentStatus
 {
     [EnumMember(Value = "Unknwon")]
     Unknown,

     [EnumMember(Value = "New")]
     New,

     [EnumMember(Value = "Pending")]
     Pending,

     [EnumMember(Value = "Completed")]
     Completed,

     [EnumMember(Value = "something_different_with_underline")]
     SomethingDifferentWithUnderline
 }