『QQ:1353814576』

C#实现枚举类型json序列化映射,.NET环境下下JSON枚举使用键名来序列化


如何实现JsonConvert.SerializeObject枚举序列操作时 使用键名来序列化

最近新接了一个二手项目的维护任务,经过这段时间的维护对大体的业务逻辑都有了大致了解,业务实际没那么复杂 ,却搞的逻辑复杂异常且排错机制真的无力吐槽,导致现有程序维护起来是真的操蛋(目测也是上个维护人员的跑路的原因),接手过坑爹项目的程序员大概都理解遇到一个bug通宵处理的痛,于是有了想简化出来一个新的版本。有点跑题了,

这次是一个简单需求,是临时想出来的,没想到实现起来还挺简单的。

需求:程序的配置信息采用json格式存储下来的文本文件,每次启动加载反序列化读取一次。其中有一个枚举类,正常情况下使用newtonsoft序列化生成的json字符串是以枚举的值输出的 如下

///测试枚举类
public enum TestEnum
{
           数据库=0,
           WebApi=1
}
///测试类
public class TestConfig
{
           public TestEnum DataType{get;set;}
}

序列化得到字符串<

var testConfig=new TestConfig()
{
          DataType=TestEnum.数据库;
};
///序列化字符串
string jsonStr =JsonConvert.SerializeObject(testConfig)

通常序列化得到结果 是输出枚举值的 像下面这样:

{
     DataType:0
}

但实际想要的效果是输出键名 如下这样

{
      DataType:"数据库"
}
实现办法 在枚举类配置上方标注扩展属性
///测试类
public class TestConfig
{
         [JsonConverter(typeof(StringEnumConverter))]
         public TestEnum DataType{get;set;}
}