使用 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();
读完这个 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();