使用 JsonConverter 获取枚举元素值

Using JsonConverter for enum element value

读完这个 post 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+ 可以更简单地实现它。

此致, 鲁本斯

您可以做几件事。

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

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

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

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

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

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

你应该使用

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

明确使用 int 值。

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

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

它有点笨拙,但可以完成工作。 或者,您可以添加一个扩展方法,该方法 returns int 值:

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

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

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

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