【问题标题】:JsonConverter attribute on enum breaks asp.net core model binding枚举上的 JsonConverter 属性破坏了 asp.net 核心模型绑定
【发布时间】:2017-10-03 22:39:42
【问题描述】:

我有一个简单的类,其中包含一个 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 中使用它来建模绑定:

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 的一个实例,但枚举被转换为整数,而不是其字符串值。所以经过一番谷歌搜索后,我用

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

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

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

有没有办法解决这个问题,让这两种情况都能正常工作?

谢谢

【问题讨论】:

  • 能否也添加生成的 JSON(带转换器)?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多