將 C# 枚舉序列化爲 JSON 字符串 實踐

Markdown

1、定義枚舉

public enum SiteTypeEnum
{
    中轉部 = 1,
    網點 = 2
}

還有 BooleanEnum 和 OptTypeEnum 這兩個枚舉,這裏暫且省略了它們的定義。javascript

2、服務端方法

這裏總共轉化了 3 個枚舉java

public class UtilityController : BaseController
{
    [CheckLogin]
    [HttpPost]
    public JsonResult GetEnumData()
    {
        JsonResult<object> result = new JsonResult<object>();

        string booleanEnumJson = typeof(BooleanEnum).EnumToJson();
        string siteTypeEnumJson = typeof(SiteTypeEnum).EnumToJson();
        string optTypeEnumJson = typeof(OptTypeEnum).EnumToJson();

        result.Data = new
        {
            enumData = new Dictionary<string, object>()
            {
                { "booleanEnumJson", booleanEnumJson },
                { "siteTypeEnumJson", siteTypeEnumJson },
                { "optTypeEnumJson", optTypeEnumJson }
            }
        };
        return Json(result, JsonRequestBehavior.AllowGet);
    }
}

注意,除了枚舉自身名稱以外,其他之處一概採用 -Json 後綴,方便識別。ajax

3、客戶端請求

一、數據定義

服務端的枚舉,對應於 js 端的數組數組

// 布爾值
var BooleanEnum = [
];
 
// 網點類型
var SiteTypeEnum = [
];
 
// 操做類型
var OptTypeEnum = [
];
二、請求

此處的代碼與上述定義同屬一個 js 文件,這裏不須要「自執行函數」,以確保枚舉數組能夠被全局訪問。async

$(document).ready(function () {
 
    var urlEnum = {
        GetEnumData: "/Utility/GetEnumData"
    };
 
    // 發起請求
    $.ajax({
        data: {},
        type: "POST",
        dataType: "JSON",
        async: false,
        url: urlEnum.GetEnumData,
        success: function (result) {
            console.info("返回的枚舉數據爲:↓ ");
            console.info(JSON.stringify(result.Data, null, 4));

            if (result.Status) {
                var data = result.Data;
                bindData(data, "booleanEnumJson", "BooleanEnum", BooleanEnum);
                bindData(data, "siteTypeEnumJson", "SiteTypeEnum", SiteTypeEnum);
                bindData(data, "optTypeEnumJson", "OptTypeEnum", OptTypeEnum);
            } else {
                // 提示失敗
                alert(result.StatusMessage);
            }
        }
    }); // end ajax
 
    /*
     * 綁定數據
     *  data 數據源
     *  targetArray 數組變量 
     */
    function bindData(data, stringJson, typeOfEnum, targetArray) {
        // 布爾值
        var enumJson = $.parseJSON(data.enumData[stringJson])[typeOfEnum];
        $.each(enumJson, function (text, val) {
            var obj = {
                name: text,
                value: val
            };
            targetArray.push(obj);
        });
    }
 
});

參數說明:函數

參數名 header含義
data 包含全部枚舉的數據源
stringJson Dictionary 的鍵,好比 siteTypeEnumJson
typeOfEnum 枚舉名稱,好比 SiteTypeEnum
targetArray js 數組變量
相關文章
相關標籤/搜索