Вы можете использовать EnumMemberAttribute
в сочетании с StringEnumConverter
для достижения своей цели.Определите SomeEnum
следующим образом
[JsonConverter(typeof(StringEnumConverter))]
public enum SomeEnum
{
[EnumMember(Value = "eval01")]
EnumValue01,
[EnumMember(Value = "eval02")]
EnumValue02
}
. В этот момент он будет работать так, как вам нужно, только когда используется сериализатор Newtonsoft
json, например, когда контроллер ожидает запрос POST
, а параметр помечен как [FromBody]
.В вашем случае это не сработает, потому что при привязке [FromQuery]
параметр json сериализатор не используется.Чтобы решить эту проблему, создайте пользовательское связующее для модели
public class JsonModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
string rawData = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).FirstValue;
rawData = JsonConvert.SerializeObject(rawData); //turns value to valid json
try
{
SomeEnum result = JsonConvert.DeserializeObject<SomeEnum>(rawData); //manually deserializing value
bindingContext.Result = ModelBindingResult.Success(result);
}
catch (JsonSerializationException ex)
{
//do nothing since "failed" result is set by default
}
return Task.CompletedTask;
}
}
Обновите SomeEnum
определение для использования JsonModelBinder
[JsonConverter(typeof(StringEnumConverter))]
[ModelBinder(typeof(JsonModelBinder))]
public enum SomeEnum