該轉換過程須要引用 Newtonsoft.JSON,這其中的轉換過程仍是蠻有意思的。javascript
/// <summary> /// 託寄物品枚舉 /// </summary> public enum DeliveryGoodsEnum { 文件 = 1, 數碼產品 = 2, 生活用品 = 3, 服飾 = 4, 食品 = 5, 其餘 = 6 }
一般來講,這些值會綁定於相似下拉框這樣的控件中,一個用於顯示文本(text),一個則是值(value)。java
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 環境爲例:app
// 託寄物品 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);
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 對象,而後遍歷枚舉各項。this