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;}
}