控制器动作枚举参数绑定为字符串

时间:2014-05-15 13:00:35

标签: json enums asp.net-web-api2

我有一个Web API控制器操作

[Route("{type}")]
public IEnumerable<Content> Get(ContentType type)
{
    ...
}

其中ContentType是枚举,type是作为字符串提供的,而不是整数。

当我检查了JsonConverterAttribute类时,似乎应该可以将它放在方法参数旁边

[AttributeUsage(AttributeTargets.Class |
                AttributeTargets.Struct |
                AttributeTargets.Enum |
                AttributeTargets.Property |
                AttributeTargets.Field |
                AttributeTargets.Interface |
                AttributeTargets.Parameter, // <= HERE!
                AllowMultiple = false)]
public class JsonConverterAttribute : Attribute
...

但这似乎不起作用:

[Route("{type}")]
public IEnumerable<Content> Get([JsonConverter(typeof(StringEnumConverter))] ContentType type)
{
    ...
}

我收到了一个错误:

  

参数字典包含非可空类型参数'type'的空条目'.... ContentType'用于'...'中的方法'...'。可选参数必须是引用类型,可空类型,或者声明为可选参数。

我也不想将此转换器放在我的全局配置中,因为我希望我的枚举序列化为整数。我只需要在一些地方从字符串中反序列化

可能的替代方法是传入字符串并使用Enum.Parse()方法手动解析它,但如果可能的话我想避免使用它。

0 个答案:

没有答案