将 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 数组变量
原文地址:https://www.cnblogs.com/ramantic/p/7610066.html