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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值