c# - 处理 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:尝试了这里提到的内容,但它对我不起作用。
解决方案
.NET Core 3.0 中的 ASP.NET删除了 JSON.NET(Newtonsoft.Json) 依赖项(它在您提供的链接中使用),因此请尝试使用System.Text.Json
's attributes:JsonStringEnumConverter
和JsonConverterAttribute
.
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
属性的值。
推荐阅读
- unity3d - Vungle 中介适配器在 Unity 中不起作用
- javascript - 如何在 Vue 组件中使用依赖项?
- javascript - 如何以相同的方法获取文件名
- c# - 无法启动 Kestrel。无法绑定到已在使用的地址地址
- java - 我们可以修改cordova插件(cordova-plugin-fcm)并在我们的项目中使用吗?
- javascript - javascript setinterval 崩溃资源管理器 11 选项卡
- c# - Docusign CreateConsoleview 返回网址不起作用
- laravel - 作曲家转储自动加载什么都不做
- java - 我们可以通过map调用函数吗,在Hashmap函数的值中传递函数名
- html - 在元素两侧平均分配溢出文本