我在使用 .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
作为字符串吗?
谢谢!
我通过删除
.AddJsonOptions(...)
并添加以下内容解决了问题:
builder.Services.ConfigureHttpJsonOptions(o => o.SerializerOptions.Converters.Add(new JsonStringEnumConverter()));