首页 > 解决方案 > 处理 post 请求正文中的枚举

问题描述

我正在创建一个 ASP.NET Core Web API。

我想要一个像这样的帖子正文:

{
"Name": "XYX",
"Status":"Waiting"
}

状态是一个枚举:

public enum Status
{
    [Description("Waiting")]
    Waiting = 1,
    [Description("Occuring")]
    Occuring = 2,
    [Description("Stopping")]
    Stopping = 3,
}

我应该怎么做才能避免出现错误:

The JSON value could not be converted to PostgreSql.Enums.StatusEnum. Path:

PS:尝试了这里提到的内容,但它对我不起作用。

标签: c#asp.net-coreasp.net-web-apienums

解决方案


.NET Core 3.0 中的 ASP.NET删除了 JSON.NET(Newtonsoft.Json) 依赖项(它在您提供的链接中使用),因此请尝试使用System.Text.Json's attributes:JsonStringEnumConverterJsonConverterAttribute.

UPD 无法重现您在评论中提到的问题:

class MyClass
{    
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public Status MyProperty { get; set; }

    [JsonConverter(typeof(JsonStringEnumConverter))]
    public Status MyProperty1 { get; set; }
}

var serialized = JsonSerializer.Serialize(new MyClass
{
    MyProperty = Status.Waiting,
    MyProperty1 = Status.Occuring
}); // results in string containing {"MyProperty":"Waiting","MyProperty1":"Occuring"}

var result = JsonSerializer.Deserialize<MyClass>(serialized); // all properties set

另请注意,Status值的名称用于序列化/反序列化,而不是Description属性的值。


推荐阅读