該轉換過程需要引用 Newtonsoft.JSON,這其中的轉換過程還是蠻有意思的。
一、定義枚舉
/// <summary>
/// 托寄物品枚舉
/// </summary>
public enum DeliveryGoodsEnum
{
文件 = 1,
數碼產品 = 2,
生活用品 = 3,
服飾 = 4,
食品 = 5,
其他 = 6
}
通常來說,這些值會綁定於類似下拉框這樣的控件中,一個用於顯示文本(text),一個則是值(value)。
二、定義轉換方法
public static class EnumExtensions
{
public static string EnumToJson(this Type type)
{
if (!type.IsEnum)
throw new InvalidOperationException("enum expected");
var results =
Enum.GetValues(type).Cast<object>()
.ToDictionary(enumValue => enumValue.ToString(), enumValue => (int) enumValue);
return string.Format("{{ \"{0}\" : {1} }}", type.Name, Newtonsoft.Json.JsonConvert.SerializeObject(results));
}
}
在以上轉換過程中,枚舉首先被轉化為字典,接着才被序列化為字符串。
三、轉換成 JSON 字符串並組織起來發往客戶端
以 ASP.NET MVC 3 環境為例:
// 托寄物品
string deliveryGoodsEnumJson = typeof(DeliveryGoodsEnum).EnumToJson();
// 付款方式
string paymentModeEnumJson = typeof(PaymentModeEnum).EnumToJson();
// 囑咐
string expectationEnumJson = typeof(ExpectationEnum).EnumToJson();
result.Data = new
{
enumData = new Dictionary<string, object>()
{
{ "deliveryGoods", deliveryGoodsEnumJson },
{ "paymentMode", paymentModeEnumJson },
{ "expectation", expectationEnumJson }
}
};
return Json(result, JsonRequestBehavior.AllowGet);
四、JS 提取枚舉值並呈現
var data = result.Data;
// 托寄物品
var deliveryGoods = $.parseJSON(data.enumData.deliveryGoods).DeliveryGoodsEnum;
$ddlDeliveryGoods.empty();
$.each(deliveryGoods, function (key, val) {
console.log(key + ":" + val);
$ddlDeliveryGoods.append("<li val='" + val + "'>" + key + "</li>");
});
通過 $.parseJSON() 轉換為 JSON 對象,然后遍歷枚舉各項。