使用JsonConverter获取枚举元素值

时间:2016-11-10 21:20:06

标签: c# json converter

阅读完这篇文章JSON serialization of enum as string后,我仍在寻找一种快速使用Razor javascript这种类型的枚举的方法:

    [JsonConverter(typeof(StringEnumConverter))]
    public enum StatusReplacement
    {
        ApprovalPending = 1,
        Canceled = 2,
        Approved = 3,
        AwaitingDelivery = 4,
        Delivered = 5,
        Completed = 6
    }

通过使用JsonConverter 我可以使用元素枚举但不是它们的值。我也试过设置每个元素[EnumMember(Value =“”)]。

预期结果

...Razor...
<script>
var elementValue = @StatusReplacement.ApprovalPending;
alert(elementValue) //Expecting to return 1 instead of ApprovalPending *undefined.
</script>

我不确定我是否真的为此目的使用任何html助手之王。 我怀疑今天使用MVC 4 +有一种更简单的方法来实现它。

此致 鲁

3 个答案:

答案 0 :(得分:1)

你可以做几件事。

var elementValue = @Json.Encode(StatusReplacement.ApprovalPending);

执行Json.Encode会产生的开销,但是,如果您使用自定义值(例如,将ApprovalPending的Json值更改为foo)那么这是您最好的选择。

或者,如果您不打算自定义值,您可以ToString()

var elementValue = @StatusReplacement.ApprovalPending.ToString();

答案 1 :(得分:1)

JSON格式化程序优先考虑数据的输出,并提供枚举值本身的字符串输出:

var data = "@StatusReplacement.ApprovalPending"; // = ApprovalPending

你应该使用

var data = @((int)StatusReplacement.ApprovalPending); // = 1

明确使用int值。

答案 2 :(得分:1)

最简单的解决方案可能是将您的枚举值转换为Razor代码中的int:

var elementValue = @((int)StatusReplacement.ApprovalPending);

这有点笨拙,但做的工作。 或者,您可以添加一个返回int值的扩展方法:

将以下方法添加到静态类:

public static int EnumValue(this StatusReplacement statusReplacement) 
{
   return (int)statusReplacement;
}

然后可以从你的剃刀代码中调用它:

var elementValue = @StatusReplacement.ApprovalPending.EnumValue();