基于控制器的 API 中 .NET 9 枚举类型的问题

问题描述 投票:0回答:1

我在使用 .NET 9 时遇到问题。

特别是,此类代表我遇到问题的端点的输入。

public class RequirementForAdd 
{
    public string AttributeName { get; set; }
    public RequirementOperator Operator { get; set; }
    public string Value { get; set; }
    public bool IsMustHave { get; set; }
}

在这个类中

RequirementOperator
是一个简单的枚举:

public enum RequirementOperator 
{
    Equals,
    GreaterThan,
    LessThan,
    GreaterThanOrEqual,
    LessThanOrEqual,
}

我希望 REST API 接受此枚举作为字符串。相反,即使我以这种方式添加转换器:

// Add controllers services to the service collection, and configure JSON options.
builder.Services.AddControllers(options => {
       options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes =
       true;// Suppress implicit required attribute for non-nullable reference types.
       })
       .AddJsonOptions(options => {
       // Add JSON converter for enum strings and configure naming policy.
       options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());       
       });

API 结果接受一个整数,正如您在生成的 OpenAPI 文件中看到的那样(使用使用

MapOpenApi()
的新系统):

 "RequirementForAdd": {
        "type": "object",
        "properties": {
          "attributeName": {
            "type": "string",
            "nullable": true
          },
          "operator": {
            "$ref": "#/components/schemas/RequirementOperator"
          },
          "value": {
            "type": "string",
            "nullable": true
          },
          "isMustHave": {
            "type": "boolean"
          }
        }
      },
      "RequirementOperator": {
        "type": "integer"
      },

我非常确定,当我使用 .NET 8 时,它可以毫不费力地工作,并且 API 接受枚举字符串。

有人可以支持我并告诉我如何才能获得

RequirementOperator
作为字符串吗?

谢谢!

json serialization asp.net-core-webapi openapi .net-9.0
1个回答
0
投票

我通过删除

.AddJsonOptions(...)
并添加以下内容解决了问题:

builder.Services.ConfigureHttpJsonOptions(o => o.SerializerOptions.Converters.Add(new JsonStringEnumConverter()));
© www.soinside.com 2019 - 2024. All rights reserved.