【问题标题】:Using JsonConverter for enum element value使用 JsonConverter 获取枚举元素值
【发布时间】:2016-11-10 21:20:06
【问题描述】:

在阅读了这篇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+ 来实现它。

问候, 鲁本斯

【问题讨论】:

    标签: c# json converter


    【解决方案1】:

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

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

    你应该使用

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

    明确使用int 值。

    【讨论】:

    • 这正是我想要的。非常感谢@stephen-reindl
    【解决方案2】:

    你可以做几件事。

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

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

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

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

    【讨论】:

    • 很好的方法@cameron 特别是因为您考虑了更改枚举元素成员描述的可能性。你的贡献非常有用。谢谢。
    【解决方案3】:

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

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

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

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

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

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

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

    【讨论】:

    • 你是对的@rune-grimstad 我想最简单的解决方案是强制枚举。但是,您建议的其他解决方案非常受欢迎且易于使用。谢谢。
    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多