Enums ASP.NET核心JSON模型将int绑定到enum 脚本

Enums ASP.NET核心JSON模型将int绑定到enum 脚本,enums,integer,asp.net-core-3.1,model-binding,Enums,Integer,Asp.net Core 3.1,Model Binding,我想将具有整数值的传入JSON请求映射到相应的枚举值。 下面的代码是简化的,因为实际上MyRequest类中有更多的字段 数据代码 公共枚举策略 { 未知=0, 保单1=1, 预期=2 } 公共枚举设计 { 未知=0, 项目=1, 天数=2天 } 公共阶级政策 { 公共策略?策略ID{get;set;} 公共设计?设计ID{get;set;} } 类MyRequest { 公共int Id{get;set;} 公共策略{get;set;} } JSON请求 { “政策”:{ “保单ID”:2

我想将具有整数值的传入JSON请求映射到相应的枚举值。 下面的代码是简化的,因为实际上MyRequest类中有更多的字段

数据代码

公共枚举策略
{
未知=0,
保单1=1,
预期=2
}
公共枚举设计
{
未知=0,
项目=1,
天数=2天
}
公共阶级政策
{
公共策略?策略ID{get;set;}
公共设计?设计ID{get;set;}
}
类MyRequest
{
公共int Id{get;set;}
公共策略{get;set;}
}
JSON请求
{
“政策”:{
“保单ID”:2,
“设计ID”:2
},
“id”:1
}
控制器代码
[HttpPut]
公共异步任务Put(MyRequest)
{
//reques.Policys.DesignId为空
//reques.Policys.PolicyId为空
}

在深入研究这个问题之后,由于微软几乎没有文档,我发现了类似的问题,给了我正确的方向:实现一个定制的
JSONConverter

JSONConverter
公共类ContractConverter:JsonConverter
{
公共覆盖布尔CanConvert(类型objectType)
{
返回类型(策略)==objectType;
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
var rawValue=序列化程序。反序列化(读取器);
var policyId=(Policy)(rawValue.policyId);
var designId=(Design)(rawValue.designId);
返回新策略(policyId、designId);
}
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
抛出新的NotImplementedException();
}
公共覆盖boolcanwrite=>false;
}
Startup.cs
services.AddControllers()
.AddNewtonsoftJson(o=>o.SerializerSettings.Converters.Add(newContractConverter());