Newtonsoft.Json
Newtonsoft.Json功能:
0.基本用法
1.忽略某些属性
2.默认值的处理
3.空值的处理
4.支持非公共成员
5.日期处理
6.自定义序列化的字段名称
7.动态决定属性是否序列化
8.枚举值的自定义格式化问题
9.自定义类型转换
10.全局序列化设置
0.基本用法
public class Person {private string Surname = "李";//姓public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 } Person person = new Person() { Name = "四", Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now }; string json = JsonConvert.SerializeObject(person); person = JsonConvert.DeserializeObject<Person>(json);
json结果:
{"Name":"四","Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-06T19:16:23.7298046+08:00"}
1.忽略某些属性
[JsonObject(MemberSerialization.OptIn)]//默认情况下,所有的成员不会被序列化,只有标注Newtonsoft.Json.JsonProperty或System.Runtime.Serialization.DataMember特性的成员才会被序列化, public class Person {private string Surname = "李";//姓 [JsonProperty]public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 } Person person = new Person() { Name = "四", Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now }; string json = JsonConvert.SerializeObject(person);
json结果:
{"Name":"四"}
[JsonObject(MemberSerialization.OptOut)]//默认情况下,所有公共成员都是序列化的。可以使用Newtonsoft.Json.JsonIgnore或System.NonSerialized排除公共成员 public class Person {private string Surname = "李";//姓 [JsonIgnore]public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 } Person person = new Person() { Name = "四", Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now }; string json = JsonConvert.SerializeObject(person);
json结果:
{"Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-06T19:40:32.1496495+08:00"}
[JsonObject(MemberSerialization.Fields)]//所有公共和私有字段都被序列化。可以使用Newtonsoft.Json.JsonIgnore或System.NonSerialized排除成员public class Person{private string Surname = "李";//姓public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 } Person person = new Person() { Name = "四", Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now }; string json = JsonConvert.SerializeObject(person);
json结果:
{"Surname":"李","<Name>k__BackingField":"四","<Sex>k__BackingField":null,"<Eye>k__BackingField":"Black","<IsAdult>k__BackingField":true,"<Age>k__BackingField":18,"<Born>k__BackingField":"2019-05-06T20:01:20.623058+08:00"}
2.默认值的处理
DefaultValueHandling.Include | 在序列化对象时,包含成员值与成员默认值相同的成员。包含的成员被写入JSON。反序列化时没有效果。 |
DefaultValueHandling.Ignore | 在序列化对象时忽略成员值与成员默认值相同的成员,这样就不会将其写入JSON。这个选项将忽略对象和可空类型的所有默认值(例如null);用于整数、小数和浮点数;布尔语false)。可以通过在属性上放置System.ComponentModel.DefaultValueAttribute来更改被忽略的默认值。 |
DefaultValueHandling.Populate | 在反序列化时,具有默认值但没有JSON的成员将被设置为其默认值。 |
DefaultValueHandling.IgnoreAndPopulate | 在序列化对象时忽略成员值与成员默认值相同的成员,在反序列化时将成员设置为其默认值。 |
public class Person{private string Surname = "李";//姓[DefaultValue("四")]public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 }JsonSerializerSettings jsetting = new JsonSerializerSettings();jsetting.DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate;Person person = new Person() { Name = "四", Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now };string json = JsonConvert.SerializeObject(person, jsetting);
3.空值的处理
3.1.可以通过全局配置JsonSerializerSettings.NullValueHandling来设置所有成员。
NullValueHandling.Include |
在序列化和反序列化对象时包含空值。 |
NullValueHandling.Ignore |
在序列化和反序列化对象时忽略空值。 |
{private string Surname = "李";//姓public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 }JsonSerializerSettings jsetting = new JsonSerializerSettings();jsetting.NullValueHandling = NullValueHandling.Ignore;Person person = new Person() { Name = null, Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now };string json = JsonConvert.SerializeObject(person, jsetting);
json结果:
{"Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-07T23:13:29.6252766+08:00"}
3.2.利用JsonProperty对指定成员进行设置。
public class Person{private string Surname = "李";//姓[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 }Person person = new Person() { Name = null, Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now };string json = JsonConvert.SerializeObject(person);
json结果:
{"Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-07T23:44:18.8010434+08:00"}
4.支持非公共成员
public class Person{[JsonProperty]private string Surname = "李";//姓public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 }Person person = new Person() { Name = null, Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now };string json = JsonConvert.SerializeObject(person);
json结果:
{"Surname":"李","Name":null,"Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-07T23:48:18.7837696+08:00"}
5.日期处理
6.自定义序列化的字段名称
public class Person{private string Surname = "李";//姓[JsonProperty(PropertyName = "名称")]public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期 }Person person = new Person() { Name = null, Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now };string json = JsonConvert.SerializeObject(person);
json结果:
{"名称":null,"Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-08T00:09:07.7562068+08:00"}
7.动态决定属性是否序列化
8.枚举值的自定义格式化问题
public enum ProfessionType : int{teacher = 0,//教师 worker = 1,//工人 peasant = 2//农民 }public class Person{private string Surname = "李";//姓 public string Name { get; set; }//名称private string Sex { get; set; }//性别public Color Eye { get; set; }//眼睛public bool IsAdult { get; set; }//是否成年public int Age { get; set; }//年龄public DateTime Born { get; set; }//出生日期[JsonConverter(typeof(StringEnumConverter))]public ProfessionType Profession { get; set; }//职业 }Person person = new Person() { Name = null, Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now, Profession= ProfessionType.worker };string json = JsonConvert.SerializeObject(person);
json结果:
{"Name":null,"Eye":"Black","IsAdult":true,"Age":18,"Born":"2019-05-08T00:21:16.2198725+08:00","Profession":"worker"}
9.自定义类型转换
10.全局序列化设置
JsonSerializerSettings jsetting = new JsonSerializerSettings();Person person = new Person() { Name = null, Eye = Color.Black, IsAdult = true, Age = 18, Born = DateTime.Now, Profession= ProfessionType.worker };string json = JsonConvert.SerializeObject(person);
转载于:https://www.cnblogs.com/tlmbem/p/10821373.html
Newtonsoft.Json相关推荐
- Newtonsoft.Json文件错误
今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原 newtonsoft.Json ...
- Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
Newtonsoft.Json.dll 本地调用正常,服务器调用不正常的问题 请将System.Runtime.Serialization.dll 传到服务器项目bin文件夹中即可 转载于:https ...
- Newtonsoft.Json code
序列化 Product product = new Product(); product.ExpiryDate = new DateTime(2008, 12, 28);JsonSerializer ...
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...
- Newtonsoft.Json 概述
有时候,在前后台数据交互或者APP与后台交互的时候,我们通常会使用Json进行数据交互,为此会使用到Newtonsoft.Json.dll 这个类库,这个类库非微软官方,但是下载量已经超过了数十万次, ...
- Newtonsoft.Json高级用法
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)...
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- Newtonsoft.Json的简单使用
2019独角兽企业重金招聘Python工程师标准>>> 什么是Newtonsoft.Json Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库. Ne ...
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...
- Newtonsoft.Json(Json.net)的基本用法
Newtonsoft.Json(Json.net)的基本用法 添加引用: 使用NuGet,命令:install-package Newtonsoft.Json 实体类: public class Bo ...
最新文章
- python flask 部署_如何进行Python Flask项目的部署?
- 海伦公式c语言编程funcd,c语言编程练习题及答案_0.doc
- LeetCode Partition List(链表分段)
- 关于异步请求的一些事
- 防止程序多开的两种方法
- CDH6.3.2添加Hue服务时,验证数据库连接报错 Unexpected error. Unable to verify database connection.
- 算法c语言源码_C语言实现推箱子
- 图像局部显著性—点特征(Fast)
- ./configure: error: SSL modules require the OpenSSL library.
- 如何用命令行给mySQL添加用户
- 关于C#日期格式化问题
- CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...
- 渗透测试专用浏览器 - Sandcat
- 关于让PDF打开后目录的默认状态,PDF目录打开后全部折叠,PDF目录打开后全部展开
- linux如何删除非空文件夹_linux删除文件夹命令
- 虚拟摄像头之一: android8.1 移植 v4l2loopback 虚拟摄像头
- centos7安装的大致步骤
- java实现找一条转乘次数最少的公交线路?,基于最优换乘次数的城市公交查询算法...
- 一招学会绘制UI图标超椭圆
- Tesseract学习(一)