JSON使用JsonPropertyAttribute

本文详细介绍了使用JSON.NET进行属性重命名、序列化时调整属性显示顺序、设置属性必填条件、序列化引用类型集合以及如何在序列化时忽略null值的方法。通过实例展示了如何在.NET环境下灵活运用JSON.NET处理JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JSON使用JsonPropertyAttribute重命名属性名

1.先创建一个Movie对象,然后在其属性上添加JsonProperty,并指定重命名的名称。注意:属性Name和Director已指定

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;

namespace JSONDemo
{    
    public class Movie
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("Chinese Director")]
        public string Director { get; set; }
        
        public int ReleaseYear { get; set; }
    }
}


2.实例化Movie对象,然后序列化。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Serialization;
using GongHuiNewtonsoft.Json.Converters;

namespace JSONDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Movie m = new Movie
            {
                Name = "非诚勿扰1",
                Director = "冯小刚",
                ReleaseYear = 2008
            };

            string json = JsonConvert.SerializeObject(m, Formatting.Indented);
            Console.WriteLine(json);
        }
    }
}


3.运行结果,注意:属性ReleaseYear未被重命名

 

二、JSON使用JsonPropertyAttribute序列化升序排序属性

1.先创建一个Movie对象,然后指定JsonProperty,并添加Order属性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;

namespace JSONDemo
{    
    public class Movie
    {
        [JsonProperty(Order=4)]
        public string Name { get; set; }

        [JsonProperty(Order=0)]
        public string Director { get; set; }
        
        public int ReleaseYear { get; set; }

        [JsonProperty(Order=-3)]
        public string ChiefActor { get; set; }

        [JsonProperty(Order=2)]
        public string ChiefActress { get; set; }
    }
}


2.实例化Movie对象,然后序列化。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Serialization;
using GongHuiNewtonsoft.Json.Converters;

namespace JSONDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Movie m = new Movie
            {
                Name = "非诚勿扰1",
                Director = "冯小刚",
                ReleaseYear = 2008,
                ChiefActor="葛优",
                ChiefActress="舒淇"
            };

            string json = JsonConvert.SerializeObject(m, Formatting.Indented);
            Console.WriteLine(json);
        }
    }
}


3.运行结果。注意:未指定Order序号的属性,界定于大于负数小于正数,并按默认顺序排序。

 

三、JSON使用JsonPropertyAttribute反序列化属性时,Required指定属性性质

1.创建一个Movie对象,给属性添加JsonProperty,并指定其Required的性质。属性Name必须有值,DateTime可以为空.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;

namespace JSONDemo
{    
    public class Movie
    {
        [JsonProperty(Required=Required.Always)]
        public string Name { get; set; }

        [JsonProperty(Required = Required.AllowNull)]
        public DateTime? ReleaseDate { get; set; }

        public string Director { get; set; }
    }
}


2.实例化Movie对象,反序列化JSON。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Serialization;
using GongHuiNewtonsoft.Json.Converters;

namespace JSONDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
                'Name':'举起手来1',
                'Director':'冯小宁',
                'ReleaseDate':null
            }";

            Movie m = JsonConvert.DeserializeObject<Movie>(json);
            Console.WriteLine(m.Name);
            Console.WriteLine(m.Director);
            Console.WriteLine(m.ReleaseDate);
        }
    }
}


3.运行结果是

 

四、JSON使用JsonPropertyAttribute序列化引用类型集合

1.创建一个Director对象,并声明一个本身类型的属性,指定JsonProperty中的IsReference为true.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;

namespace JSONDemo
{
    public class Director
    {
        public string Name { get; set; }

        [JsonProperty(IsReference=true)]
        public Director ExecuteDir { get; set; }
    }
}

 

2.创建一个Movie对象,声明一个Director集合的属性,指定JsonProperty中的IsReference为true.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;

namespace JSONDemo
{    
    public class Movie
    {
        public string Name { get; set; }

        [JsonProperty(ItemIsReference=true)]
        public IList<Director> Directors { get; set; }
    }
}


3.序列化对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Serialization;
using GongHuiNewtonsoft.Json.Converters;

namespace JSONDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Director dir = new Director
            {
                Name = "冯小刚"
            };

            Director dir1 = new Director
            {
                Name = "张艺谋",
                ExecuteDir = dir
            };

            Movie m = new Movie
            {
                Name = "满城尽带黄金甲",
                Directors = new List<Director>
                {
                    dir,
                    dir1
                }
            };

            string json = JsonConvert.SerializeObject(m, Formatting.Indented);
            Console.WriteLine(json);
        }
    }
}


4.运行结果

 

五、JSON使用JsonPropertyAttribute序列化忽略属性null

1.创建一个Movie对象,并在属性上指定JsonProperty,添加NullValueHandling,忽略null

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;

namespace JSONDemo
{    
    public class Movie
    {
        public string Name { get; set; }

        public string Director { get; set; }

        [JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
        public DateTime? LaunchDate { get; set; }
    }
}


2.实例化对象Movie对象,然后序列化

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Serialization;
using GongHuiNewtonsoft.Json.Converters;

namespace JSONDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Movie m = new Movie
            {
                Name = "爱情呼叫转移",
                Director = "张建亚"
            };

            string json = JsonConvert.SerializeObject(m, Formatting.Indented);
            Console.WriteLine(json);
        }
    }
}


3.运行的结果

 

JSON源代码下载地址:http://download.csdn.net/detail/lovegonghui/9342751

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值