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相关推荐

  1. Newtonsoft.Json文件错误

    今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原  newtonsoft.Json ...

  2. Newtonsoft.Json.dll 本地调用正常,服务器调用不正常

    Newtonsoft.Json.dll 本地调用正常,服务器调用不正常的问题 请将System.Runtime.Serialization.dll 传到服务器项目bin文件夹中即可 转载于:https ...

  3. Newtonsoft.Json code

    序列化 Product product = new Product(); product.ExpiryDate = new DateTime(2008, 12, 28);JsonSerializer ...

  4. 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

    1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...

  5. Newtonsoft.Json 概述

    有时候,在前后台数据交互或者APP与后台交互的时候,我们通常会使用Json进行数据交互,为此会使用到Newtonsoft.Json.dll 这个类库,这个类库非微软官方,但是下载量已经超过了数十万次, ...

  6. Newtonsoft.Json高级用法

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  7. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)...

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  8. Newtonsoft.Json的简单使用

    2019独角兽企业重金招聘Python工程师标准>>> 什么是Newtonsoft.Json Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库. Ne ...

  9. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法

    Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...

  10. Newtonsoft.Json(Json.net)的基本用法

    Newtonsoft.Json(Json.net)的基本用法 添加引用: 使用NuGet,命令:install-package Newtonsoft.Json 实体类: public class Bo ...

最新文章

  1. python flask 部署_如何进行Python Flask项目的部署?
  2. 海伦公式c语言编程funcd,c语言编程练习题及答案_0.doc
  3. LeetCode Partition List(链表分段)
  4. 关于异步请求的一些事
  5. 防止程序多开的两种方法
  6. CDH6.3.2添加Hue服务时,验证数据库连接报错 Unexpected error. Unable to verify database connection.
  7. 算法c语言源码_C语言实现推箱子
  8. 图像局部显著性—点特征(Fast)
  9. ./configure: error: SSL modules require the OpenSSL library.
  10. 如何用命令行给mySQL添加用户
  11. 关于C#日期格式化问题
  12. CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...
  13. 渗透测试专用浏览器 - Sandcat
  14. 关于让PDF打开后目录的默认状态,PDF目录打开后全部折叠,PDF目录打开后全部展开
  15. linux如何删除非空文件夹_linux删除文件夹命令
  16. 虚拟摄像头之一: android8.1 移植 v4l2loopback 虚拟摄像头
  17. centos7安装的大致步骤
  18. java实现找一条转乘次数最少的公交线路?,基于最优换乘次数的城市公交查询算法...
  19. 一招学会绘制UI图标超椭圆
  20. Tesseract学习(一)

热门文章

  1. Flask Web开发——(二)模板
  2. Surging 微服务框架使用入门
  3. RALM: 实时 Look-alike 算法在微信看一看中的应用
  4. iphone dev info
  5. Modbus通信协议(Modbus protocol)
  6. ABAP alv和smartforms的基础使用
  7. 21新版FL Studio水果电音编曲Daw宿主软件好不好用?
  8. 用 Java 演奏《千千阙歌》是什么体验?
  9. js实现5秒后跳转页面
  10. 如何使用多配置yml