将 C# 枚举序列化为 JSON 字符串 实践

一、定义枚举
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 数组变量 | 
将 C# 枚举序列化为 JSON 字符串 实践的更多相关文章
- 将 C# 枚举序列化为 JSON 字符串 基础理论
		该转换过程需要引用 Newtonsoft.JSON,这其中的转换过程还是蛮有意思的. 一.定义枚举 /// <summary> /// 托寄物品枚举 /// </summary> ... 
- 将 C# 枚举反序列化为 JSON 字符串 实践
		一.定义枚举 public enum SiteTypeEnum { 中转部 = 1, 网点 = 2 } 还有 BooleanEnum 和 OptTypeEnum 这两个枚举,这里暂且省略了它们的定义. ... 
- 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象                                                       分类:            JSON             前端             2014-11-10 10:20    97人阅读    评论(1)    收藏
		一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ... 
- 将 C# 枚举反序列化为 JSON 字符串 基础理论
		该转换过程需要引用 Newtonsoft.JSON,这其中的转换过程还是蛮有意思的. 一.定义枚举 /// <summary> /// 托寄物品枚举 /// </summary> ... 
- form表单序列化为json格式数据
		在web开发过程中,经常遇到将form序列化不能格式的字符串提交到后台,下面就介绍怎样将form表单序列化为json字符串. 首先,是扩展的jquery序列化插件,依赖jquery.经测试,这段代码可 ... 
- JS对象序列化为JSON对象的方法
		var $ = $ || {}; /** * 将JS对象序列化为JSON字符串 * @param {Mixed} o The variable to decode * @return {String} ... 
- @JsonInclude(Include.NON_NULL) resttemplate 传递实体参数时 序列化为json时 空字符串不参与序列化
		@JsonInclude(Include.NON_NULL) resttemplate 传递实体参数时 序列化为json时 空字符串不参与序列化 https://www.cnblogs.com/sup ... 
- JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
		JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ... 
- JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。
		JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ... 
随机推荐
- 安全之路 —— 无DLL文件实现远程线程注入
			简介 在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着 ... 
- 17秋 软件工程 第二次作业 sudoku
			2017年秋季 软件工程 作业2:个人项目 sudoku Github Project Github Project at Wasdns/sudoku. PSP Table PSP2.1 Person ... 
- DataUtils对Connection的获取、释放和关闭的操作学习
			DataSourceUitls介绍 DataSourceUitls类位于org.springframework.jdbc.datasource包下,提供了很多的静态方法去从一个javax.sql.Da ... 
- Ajax进阶之原生js与跨域jsonp
			什么是Ajax? 两个数求和: 用Jquery和数据用json格式 viws函数: from django.shortcuts import render,HttpResponse # Create ... 
- 手把手教你解析Resources.arsc
			http://blog.csdn.net/beyond702/article/details/51744082 一.前言 对于APK里面的Resources.arsc文件大家应该都知道是干什么的(不知 ... 
- Hadoop 基本概念
			一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群的威力进行高速运算和存储. 从其定 ... 
- B+ Tree vs B Trees
			原文地址:https://blog.csdn.net/dashuniuniu/article/details/51072795 引子 最近一直回顾自己曾经写的一些文档,有一篇是关于 Clang Rew ... 
- Shell获取指定时间
			时区基本知识 相差一个时区(经度15度)时间相差一小时.简单计算口诀:1.同一个时区的相差时间用减法,2.不同时区的相差时间用加法.3东加西减.例如一,东八区是8点,问东1区几点.根据上面口诀1,算: ... 
- 导入其他python文件或者python文件的函数
			from abc import xxx 从abc的py文件导入一个具体的函数或者类 import abc 直接导入文件 a.b写在同一个文件目录下,a要使用b,直接import就可以了 
- 安装Docker和配置加速器(二)
			一. 安装 docker-ce 1. 访问 https://opsx.alibaba.com/mirror 2. 打开这条URL: 二.Ubuntu 系统安装 Docker 1. 使用apt-get进 ... 
