C#对实体进行JSON序列化时枚举的处理
实体类如下:
public enum ESex
{
Boy,
Girl
} public class Person
{
public String Name { get; set; }
public String Address { get; set; }
public String Age { get; set; }
public ESex Sex { get; set; } public Person() { } public Person(String name, String address, String age)
{
this.Name = name;
this.Address = address;
this.Age = age;
}
}
通过Newtonsoft.Json.dll进行序列化如下:
List<Person> list = new List<Person>();
for (int i = ; i < ; i++)
{
Person p = new Person("张三" + i, "重庆" + i, "" + i);
p.Sex = ESex.Girl;
list.Add(p);
}
var result=JsonConvert.SerializeObject(list);
结果为:[{"Name":"张三0","Address":"重庆0","Age":"20","Sex":1},{"Name":"张三1","Address":"重庆1","Age":"21","Sex":1}]
可以看出Sex直接转换成了1,也就是说枚举默认从0开始排序,Girl就表示1,但是如果我们想要得到{"Name":"张三1","Address":"重庆1","Age":"21","Sex":"Girl"}结果怎么办呢?
解决方案:在Sex上面加入JsonConverter说明如下:
public class Person
{
public String Name { get; set; }
public String Address { get; set; }
public String Age { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public ESex Sex { get; set; } public Person() { } public Person(String name, String address, String age)
{
this.Name = name;
this.Address = address;
this.Age = age;
}
}
这样修改后得到的结果如下:
[{"Name":"张三0","Address":"重庆0","Age":"20","Sex":"Girl"},{"Name":"张三1","Address":"重庆1","Age":"21","Sex":"Girl"}]
这样实现后反序列化同样能够成功
C#对实体进行JSON序列化时枚举的处理的更多相关文章
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...
- 解决nodejs中json序列化时Date类型默认为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...
- 解决nodejs中json序列化时Date类型为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 zhupengfei@DESKTOP-HJASOE3 MINGW64 /d/MyProject/exp2 $ node ...
- json序列化时定制支持datetime类型,和到中文让他保留中文形式
json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型 自定义时间序列化转换器 import json from json import JSONEncoder from dat ...
- java对象json序列化时忽略值为null的属性
环境: jdk: openjdk11 操作系统: windows 10教育版1903 目的: 如题,当一个对象里有些属性值为null 的不想参与json序列化时,可以添加如下注解 import com ...
- SpringBoot之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)
前言 这问题着实让人苦不堪言,有必要把它记下了. @JsonBackReference [亲测有效] 1.使用注解@JsonBackReference标记在有关联关系的实体属性上 2.仅导入此注解类有 ...
- 实体类双向映射进行Json序列化时出现无限循环的解决问题
1.@JsonIgnoreProperties 指定的字段不会被序列化,如下则ExamPaper的directory字段不会被序列化 @OneToMany(mappedBy = "direc ...
- 使用Newtonsoft进行JSON序列化时将枚举序列化为字符串的方法
一.实体书写 将枚举类型的属性前面加上[JsonConverter(typeof(StringEnumConverter))]即可. 二.举例 [JsonConverter(typeof(String ...
- JSON序列化时消除空格
使用 python 序列化时,通常使用 json.dumps()生成 json,但是会在key和value之间默认给你加上一个空格.传参时可能会应为这个空格导致服务端解析失败. 之前做接口测试时,就遇 ...
随机推荐
- Rpgmaker开发心得(1)且事件
例:NPC让你给他桃子和梨子,然后给你西瓜. 实际就是:有桃子且有梨子时的判断,但对于大多数不会直接编写脚本的同学,最好的方式就是使用开关. 思路如下: var:变量 on:开关 if(on西瓜=on ...
- 无法在web服务器下启动调试
VS2013 编译时异常 无法在web服务器下启动调试.该Web服务器未及时响应 VS2013 编译时错误 无法在web服务器上启动调试.该Web服务器未及时响应.无法在web服务器上启动调试.该 ...
- python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名
python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...
- js dom 操作技巧
1.创建元素 创建元素:document.createElement() 使用document.createElement()可以创建新元素.这个方法只接受一个参数,即要创建元素的标签名.这个标签名在 ...
- 微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击
微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击 摘要: 小程序和公众号最大的区别有如下四点:1.小程序没有粉丝,开发者在后台能看到的只能是累计用户访问数以及实时统计 ...
- IP分片丢失重传
尽管IP分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报.为什么会发生这种情况呢? 因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(TCP有超时 ...
- JavaScript中几种 获取元素的方式
1.根据id获取元素 document.getElementById("id属性的值"); 2.根据标签名字获取元素 document.getElementsByTagName(& ...
- JSP输出HTML时产生的大量空格和换行的去除方法
在WEB应用中,如果使用jsp作为view层的显示模板,都会被空格/空换行问题所困扰. 这个问题当年也困扰了我比较长的时间.因为在jsp内使用的EL标签和其他标签时,会产生大量的空格和换行符. ...
- mp4v2 基本知识
mp4v2 和mp4的一些基础知识 由于项目需要做mp4文件的合成(264+aac)和mp4文件的解析: MP4文件本身就是一个容器,对于视频来说就是把不同的内容放按照mp4的规则存放而已: 如果完全 ...
- Putty Technical Note
转载自:http://libai.math.ncu.edu.tw/bcc16/6/putty/puttyt.html Terminal panel Terminal 面板可調整 PuTTY 對於模擬終 ...