枚举的JsonConverter属性打破了asp.net核心模型绑定

时间:2017-05-05 12:34:35

标签: c# asp.net-mvc enums json.net model-binding

我有一个简单的类,其中包含 Enum 作为属性:

public class MyClass
{
    public MyEnum Type { get; set; }
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

public enum MyEnum
{
    Something,
    OrOther
}

然后我在asp.net web api中使用它来模拟bind:

public async Task<JsonResult> Post([FromBody] MyClass myClass)
{
 //Some exciting controllery type stuff in here....
}

从Fiddler发布数据:

{
"Type":"0", 
"Prop1":"TestValue",
"Prop2":"MoreTestData"
}

一切运转良好。 现在我想从Xamarin应用程序内部发布到这个API,所以使用:

var stringData = JsonConvert.SerializeObject(data);

其中data是MyClass的一个实例,但枚举转换为整数,而不是其字符串值。所以经过一些谷歌搜索后,我用

装饰了enum属性
public class MyClass
{
    [JsonConverter(typeof(StringEnumConverter))]
    public MyEnum Type { get; set; }
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

现在我的序列化工作正常,值是作为枚举的字符串表示而不是整数值。

但是,当我现在从Fiddler发布时,使用字符串或整数,模型绑定失败,值为null。

有没有办法解决这个问题,以便两种情况都有效?

由于

1 个答案:

答案 0 :(得分:2)

您应该将序列化属性添加到枚举定义中

[JsonConverter(typeof(StringEnumConverter))]
public enum MyEnum
{
    Something,
    OrOther
}