将 C# 枚举序列化为 JSON 字符串 基础理论

Markdown

该转换过程需要引用 Newtonsoft.JSON,这其中的转换过程还是蛮有意思的。

一、定义枚举

/// <summary>
/// 托寄物品枚举
/// </summary>
public enum DeliveryGoodsEnum
{
    文件 = 1,
    数码产品 = 2,
    生活用品 = 3,
    服饰 = 4,
    食品 = 5,
    其他 = 6
}

通常来说,这些值会绑定于类似下拉框这样的控件中,一个用于显示文本(text),一个则是值(value)。

二、定义转换方法

public static class EnumExtensions
{
    public static string EnumToJson(this Type type)
    {
        if (!type.IsEnum)
            throw new InvalidOperationException("enum expected");
 
        var results =
            Enum.GetValues(type).Cast<object>()
                .ToDictionary(enumValue => enumValue.ToString(), enumValue => (int) enumValue);
        return string.Format("{{ \"{0}\" : {1} }}", type.Name, Newtonsoft.Json.JsonConvert.SerializeObject(results));
    }
}

在以上转换过程中,枚举首先被转化为字典,接着才被序列化为字符串。

三、转换成 JSON 字符串并组织起来发往客户端

以 ASP.NET MVC 3 环境为例:

// 托寄物品
string deliveryGoodsEnumJson = typeof(DeliveryGoodsEnum).EnumToJson();
// 付款方式
string paymentModeEnumJson = typeof(PaymentModeEnum).EnumToJson();
// 嘱咐
string expectationEnumJson = typeof(ExpectationEnum).EnumToJson();
 
result.Data = new
{
    enumData = new Dictionary<string, object>()
    {
        { "deliveryGoods", deliveryGoodsEnumJson },
        { "paymentMode",   paymentModeEnumJson },
        { "expectation",   expectationEnumJson }
    }
};
return Json(result, JsonRequestBehavior.AllowGet);

四、JS 提取枚举值并呈现

var data = result.Data;
 
// 托寄物品
var deliveryGoods = $.parseJSON(data.enumData.deliveryGoods).DeliveryGoodsEnum;
 
$ddlDeliveryGoods.empty();
$.each(deliveryGoods, function (key, val) {
    console.log(key + ":" + val);
    $ddlDeliveryGoods.append("<li val='" + val + "'>" + key + "</li>");
});

通过 $.parseJSON() 转换为 JSON 对象,然后遍历枚举各项。

posted @   溪边静禅  阅读(3439)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示