將 C# 枚舉序列化為 JSON 字符串 基礎理論


Markdown

該轉換過程需要引用 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 對象,然后遍歷枚舉各項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM