在ASP.NETCore中将JSON字符串整数反序列化为Enum

c#

我正在创建一个 ASP.NET Core API,我的用户有一个角色,就像这样

class User
{
    public Guid Id {get; set;}

    public string Email {get; set;}

    public Role Role {get; set;}
}

enum Role : byte
{
    User = 0,
    Administrator = 1
}

现在的问题是,我的用户CreateOrUpdate端点正在获取此 JSON 数据

{
    "id": "2abe50d6-4c81-4ace-ad95-c8182d4384a3",
    "email": "someEmail@example.org",
    "role": "0"
}

这是有问题的端点声明

public User CreateOrUpdate([FromBody] User user)
{
    // ...
}

它无法反序列化,因此返回HTTP 400 Bad Request. 但是,如果我删除周围的引号0中的role属性,它就像一个魅力。

那么,如何才能获得ASP.NET核心反序列化"0"0,因此,以枚举变种User

回答

从如何使用 System.Text.Json-Enum 作为 string 自定义属性名称和值。

默认情况下,System.Text.Json 从整数转换枚举,但在你的情况下,“0”是一个字符串。您需要指定一个转换器来从字符串转换枚举,如:

public void ConfigureServices(IServiceCollection services)
{

    services.AddControllers().AddJsonOptions(o =>
    {
        o.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    });
}


以上是在ASP.NETCore中将JSON字符串整数反序列化为Enum的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>