该转换过程须要引用 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