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. 将来以静态网页形式展示漏洞影响产品信息
  2. 使用dwz框架搭建网站后台
  3. underscore.js源码研究(5)
  4. 异构计算助力客户春节webp图片编码
  5. 组策略应用到本地安全策略
  6. 双截止阀(DBB)行业调研报告 - 市场现状分析与发展前景预测
  7. OpenUDID 和 IDFA 比较
  8. “实时SPC软件”的“实时”性指什么?一探究竟!
  9. JavaWeb图书管理系统.rar(毕业设计(论文)+毕业设计指导书+大学毕业设计任务书+图书管理系统+毕业论文答辩)
  10. 处理器架构 (四) ARM指令集
  11. 2017腾讯暑期实习生从笔试到面试总结(附带华为、阿里面试经历)
  12. 为什么公交Wi-Fi还不如地铁上普及?
  13. 成功必须靠自己去争取。
  14. linux重做系统分区,如何重装linux系统
  15. UiPath:Windows计划任务调度UiPath(直接调用及.bat方式)
  16. Fast Reed-Solomon Interactive Oracle Proofs of Proximity学习笔记
  17. dockerfile构建一个(python+flask+html)镜像 + 上传到阿里云私有仓库 + 部署到k8s---全过程
  18. MATLAB 向量和矩阵
  19. Javafx顶级容器Stage(舞台)
  20. OCH1661全极超低功耗1.9ua霍尔开关

热门文章

  1. android studio 集成科大讯飞TTS在线语音合成
  2. 沉浸式翻译 安装及使用
  3. Flutter HTTP上传文件使用详解
  4. matlab 男女声识别+源码
  5. 高通平台WIFI软件配置开启2.4G和5G功能
  6. css 左右布局高度自适应,CSS布局-高度自适应
  7. jquery 终止循环_JQuery跳出each循环的方法
  8. Solidity中Storage
  9. Chocolatey的安装和使用
  10. 曝光时间与快门速度有什么区别