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


Markdown

一、定義枚舉

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

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

二、服務端方法

這里總共轉化了 3 個枚舉

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 后綴,方便識別。

三、客戶端請求

1、數據定義

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

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

此處的代碼與上述定義同屬一個 js 文件,這里不需要“自執行函數”,以確保枚舉數組可以被全局訪問。

$(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 數組變量


免責聲明!

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



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