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 数组变量
  • 相关阅读:
    SharePoint每日小贴士Web部件
    韦东山设备树课程-环境搭建【学习笔记】
    韦东山视频第3课第2节_JNI_C调用JAVA_P【学习笔记】
    韦东山视频第3课第1节_JNI_P【学习笔记】
    高通qxdm抓取sensor的log【学习笔记】
    sensor【学习笔记】
    linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
    linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】
    Android Sensor 架构深入剖析【转】
    Android Sensor详解(1)简介与架构【转】
  • 原文地址:https://www.cnblogs.com/ramantic/p/7610066.html
Copyright © 2011-2022 走看看