zoukankan      html  css  js  c++  java
  • 将 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 数组变量
  • 相关阅读:
    MongoDB集群与LBS应用系列(一)
    Docker下构建centos7容器无法使用systemctl命令的解决办法
    重新诠释的OSGi规范
    交互细节中那些变形金刚
    UX黑名单!有哪些常见的移动端UX设计误区需要规避?
    那些门户网站的兼容问题(持续更新)
    Vmware虚拟机网络模式及虚拟机与物理机通信方法
    交互设计阅读(一)
    笑傲江湖:完美解决205:您所选择的线路不存在问题
    笑傲江湖 外网
  • 原文地址:https://www.cnblogs.com/ramantic/p/7610066.html
Copyright © 2011-2022 走看看