在Guests类中定义事件的响应措施,然后在其性质上添加JsonProperty

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

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

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using GongHuiNewtonsoft.Json;  
  6.   
  7. namespace JSONDemo  
  8. {      
  9.     public class Movie  
  10.     {  
  11.         [JsonProperty(“name”)]  
  12.         public string Name { get; set; }  
  13.   
  14.         [JsonProperty(“Chinese Director”)]  
  15.         public string Director { get; set; }  
  16.           
  17.         public int ReleaseYear { get; set; }  
  18.     }  
  19. }  

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

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using GongHuiNewtonsoft.Json;  
  7. using GongHuiNewtonsoft.Json.Serialization;  
  8. using GongHuiNewtonsoft.Json.Converters;  
  9.   
  10. namespace JSONDemo  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             Movie m = new Movie  
  17.             {  
  18.                 Name = “非诚勿扰1”,  
  19.                 Director = “冯小刚”,  
  20.                 ReleaseYear = 2008  
  21.             };  
  22.   
  23.             string json = JsonConvert.SerializeObject(m, Formatting.Indented);  
  24.             Console.WriteLine(json);  
  25.         }  
  26.     }  
  27. }  

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

图片 1

 

宪章主持人公布二个标题,由三个嘉宾来回应这些难题。

② 、JSON使用JsonPropertyAttribute种类化升序排序属性

1.先创造3个Movie对象,然后内定JsonProperty,并添加Order属性。

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using GongHuiNewtonsoft.Json;  
  6.   
  7. namespace JSONDemo  
  8. {      
  9.     public class Movie  
  10.     {  
  11.         [JsonProperty(Order=4)]  
  12.         public string Name { get; set; }  
  13.   
  14.         [JsonProperty(Order=0)]  
  15.         public string Director { get; set; }  
  16.           
  17.         public int ReleaseYear { get; set; }  
  18.   
  19.         [JsonProperty(Order=-3)]  
  20.         public string ChiefActor { get; set; }  
  21.   
  22.         [JsonProperty(Order=2)]  
  23.         public string ChiefActress { get; set; }  
  24.     }  
  25. }  

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

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using GongHuiNewtonsoft.Json;  
  7. using GongHuiNewtonsoft.Json.Serialization;  
  8. using GongHuiNewtonsoft.Json.Converters;  
  9.   
  10. namespace JSONDemo  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             Movie m = new Movie  
  17.             {  
  18.                 Name = “非诚勿扰1”,  
  19.                 Director = “冯小刚”,  
  20.                 ReleaseYear = 2008,  
  21.                 ChiefActor=”葛优”,  
  22.                 ChiefActress=”舒淇”  
  23.             };  
  24.   
  25.             string json = JsonConvert.SerializeObject(m, Formatting.Indented);  
  26.             Console.WriteLine(json);  
  27.         }  
  28.     }  
  29. }  

3.运作结果。注意:未钦赐Order序号的性质,界定于不止负数小任宝茹数,并按私行认同顺序排序。

图片 2

 

 

三 、JSON使用JsonPropertyAttribute反体系化属性时,Required钦命属性性质

1.创办二个Movie对象,给属性添加JsonProperty,并钦点其Required的属性。属性Name必须有值,DateTime可以为空.

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using GongHuiNewtonsoft.Json;  
  6.   
  7. namespace JSONDemo  
  8. {      
  9.     public class Movie  
  10.     {  
  11.         [JsonProperty(Required=Required.Always)]  
  12.         public string Name { get; set; }  
  13.   
  14.         [JsonProperty(Required = Required.AllowNull)]  
  15.         public DateTime? ReleaseDate { get; set; }  
  16.   
  17.         public string Director { get; set; }  
  18.     }  
  19. }  

2.实例化Movie对象,反种类化JSON。

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using GongHuiNewtonsoft.Json;  
  7. using GongHuiNewtonsoft.Json.Serialization;  
  8. using GongHuiNewtonsoft.Json.Converters;  
  9.   
  10. namespace JSONDemo  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             string json = @”{  
  17.                 ‘Name’:’举起手来1′,  
  18.                 ‘Director’:’冯小宁’,  
  19.                 ‘ReleaseDate’:null  
  20.             }”;  
  21.   
  22.             Movie m = JsonConvert.DeserializeObject<Movie>(json);  
  23.             Console.WriteLine(m.Name);  
  24.             Console.WriteLine(m.Director);  
  25.             Console.WriteLine(m.ReleaseDate);  
  26.         }  
  27.     }  
  28. }  

3.周转结果是

图片 3

 

剖析:从供给中腾出Host (主持人) 类和Guests (嘉宾) 类。

肆 、JSON使用JsonPropertyAttribute种类化引用类型集合

1.成立二个Director对象,并声圣元(Synutra)个本人类型的性质,钦点JsonProperty中的IsReference为true.

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using GongHuiNewtonsoft.Json;  
  6.   
  7. namespace JSONDemo  
  8. {  
  9.     public class Director  
  10.     {  
  11.         public string Name { get; set; }  
  12.   
  13.         [JsonProperty(IsReference=true)]  
  14.         public Director ExecuteDir { get; set; }  
  15.     }  
  16. }  

 

2.创办三个Movie对象,声爱他美(Karicare)个Director集合的属性,指定JsonProperty中的IsReference为true.

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using GongHuiNewtonsoft.Json;  
  6.   
  7. namespace JSONDemo  
  8. {      
  9.     public class Movie  
  10.     {  
  11.         public string Name { get; set; }  
  12.   
  13.         [JsonProperty(ItemIsReference=true)]  
  14.         public IList<Director> Directors { get; set; }  
  15.     }  
  16. }  

3.连串化对象

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using GongHuiNewtonsoft.Json;  
  7. using GongHuiNewtonsoft.Json.Serialization;  
  8. using GongHuiNewtonsoft.Json.Converters;  
  9.   
  10. namespace JSONDemo  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             Director dir = new Director  
  17.             {  
  18.                 Name = “冯小刚”  
  19.             };  
  20.   
  21.             Director dir1 = new Director  
  22.             {  
  23.                 Name = “张艺谋”,  
  24.                 ExecuteDir = dir  
  25.             };  
  26.   
  27.             Movie m = new Movie  
  28.             {  
  29.                 Name = “满城尽带黄金甲”,  
  30.                 Directors = new List<Director>  
  31.                 {  
  32.                     dir,  
  33.                     dir1  
  34.                 }  
  35.             };  
  36.   
  37.             string json = JsonConvert.SerializeObject(m, Formatting.Indented);  
  38.             Console.WriteLine(json);  
  39.         }  
  40.     }  
  41. }  

4.运作结果

图片 4

 

作为难题的公布者,Host不知晓难题怎么解答。由此它只可以发表那个事件,将事件委托给八个嘉宾去处理。因而在Host
类定义事件,在Guests类中定义事件的响应措施。通过多番委托的”+=”将响应措施添加到事件列表中,最终Host 类将触发那几个事件。完结进度如下:

5、JSON使用JsonPropertyAttribute体系化忽略属性null

1.创办一个Movie对象,并在性质上点名JsonProperty,添加NullValueHandling,忽略null

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using GongHuiNewtonsoft.Json;  
  6.   
  7. namespace JSONDemo  
  8. {      
  9.     public class Movie  
  10.     {  
  11.         public string Name { get; set; }  
  12.   
  13.         public string Director { get; set; }  
  14.   
  15.         [JsonProperty(NullValueHandling=NullValueHandling.Ignore)]  
  16.         public DateTime? LaunchDate { get; set; }  
  17.     }  
  18. }  

2.实例化对象Movie对象,然后体系化

[csharp] view
plain
 copy

 

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using GongHuiNewtonsoft.Json;  
  7. using GongHuiNewtonsoft.Json.Serialization;  
  8. using GongHuiNewtonsoft.Json.Converters;  
  9.   
  10. namespace JSONDemo  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             Movie m = new Movie  
  17.             {  
  18.                 Name = “爱情呼叫转移”,  
  19.                 Director = “张建亚”  
  20.             };  
  21.   
  22.             string json = JsonConvert.SerializeObject(m, Formatting.Indented);  
  23.             Console.WriteLine(json);  
  24.         }  
  25.     }  
  26. }  

3.运作的结果

图片 5

 

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

原稿链接:http://blog.csdn.net/lovegonghui/article/details/50272743

 

图片 6

代码其实很少上边贴出来全部代码:

 

QuestionArgs.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     public class QuestionArgs:EventArgs  
  9.     {  
  10.         public string Message { get; set; }  
  11.     }  
  12. }  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     public class QuestionArgs:EventArgs  
  9.     {  
  10.         public string Message { get; set; }  
  11.     }  
  12. }  

 

 

 

 

 

Program.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class Program  
  9.     {  
  10.         static void Main(string[] args)  
  11.         {  
  12.             Host host = new Host();  
  13.             host.Name = “主持人”;  
  14.             host.args.Message = “C#的轩然大波怎么着贯彻的?”;  
  15.             Guests[] gArray = new Guests[3]  
  16.             {  
  17.                 new GuestA(){Name = “张小三”},  
  18.                 new GuestB(){Name = “李小四”},  
  19.                 new GuestC(){Name = “王老五”}  
  20.             };  
  21.             //用+=号,将嘉宾的答题方法加入到委托链  
  22.             host.QuestionEvent += new QuestionHandler(gArray[0].answer);  
  23.             host.QuestionEvent += new QuestionHandler(gArray[1].answer);  
  24.             host.QuestionEvent += new QuestionHandler(gArray[2].answer);  
  25.   
  26.             //触发事件   
  27.             host.StartAnswer();  
  28.             Console.ReadLine();  
  29.         }  
  30.     }  
  31. }<span style=”color:#ff0000;”>  
  32. </span>  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class Program  
  9.     {  
  10.         static void Main(string[] args)  
  11.         {  
  12.             Host host = new Host();  
  13.             host.Name = “主持人”;  
  14.             host.args.Message = “C#的事件如何促成的?”;  
  15.             Guests[] gArray = new Guests[3]  
  16.             {  
  17.                 new GuestA(){Name = “张小三”},  
  18.                 new GuestB(){Name = “李小四”},  
  19.                 new GuestC(){Name = “王老五”}  
  20.             };  
  21.             //用+=号,将嘉宾的答题方法参加到委托链  
  22.             host.QuestionEvent += new QuestionHandler(gArray[0].answer);  
  23.             host.QuestionEvent += new QuestionHandler(gArray[1].answer);  
  24.             host.QuestionEvent += new QuestionHandler(gArray[2].answer);  
  25.   
  26.             //触发事件  
  27.             host.StartAnswer();  
  28.             Console.ReadLine();  
  29.         }  
  30.     }  
  31. }<span style=”color:#ff0000;”>  
  32. </span>  

 

 

 

 

Host.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     public delegate void QuestionHandler(object sender,QuestionArgs e);  
  9.     public class Host  
  10.     {  
  11.         //定义三个轩然大波   
  12.         public event QuestionHandler QuestionEvent;  
  13.         public QuestionArgs args { set; get; }  
  14.         public Host()  
  15.         {  
  16.             //起头化事件参数   
  17.             args = new QuestionArgs();  
  18.         }  
  19.         public string Name { get; set; }  
  20.         public void StartAnswer()  
  21.         {  
  22.             Console.WriteLine(“先导答题”);  
  23.             QuestionEvent(this, args);  
  24.         }  
  25.     }  
  26. }  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     public delegate void QuestionHandler(object sender,QuestionArgs e);  
  9.     public class Host  
  10.     {  
  11.         //定义三个风云  
  12.         public event QuestionHandler QuestionEvent;  
  13.         public QuestionArgs args { set; get; }  
  14.         public Host()  
  15.         {  
  16.             //先导化事件参数  
  17.             args = new QuestionArgs();  
  18.         }  
  19.         public string Name { get; set; }  
  20.         public void StartAnswer()  
  21.         {  
  22.             Console.WriteLine(“起始答题”);  
  23.             QuestionEvent(this, args);  
  24.         }  
  25.     }  
  26. }  

 

 

 

 

Guests.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     /// <summary>   
  9.     /// 父类   
  10.     /// </summary>   
  11.     public class Guests  
  12.     {  
  13.         /// <summary>   
  14.         /// 嘉宾姓名   
  15.         /// </summary>   
  16.         public string Name { get; set; }  
  17.   
  18.         public virtual void answer(object sender, QuestionArgs e)  
  19.         {  
  20.             Console.Write(“事件的发出者:” + (sender as Host).Name);  
  21.             Console.WriteLine(“问题是:” + e.Message);  
  22.         }  
  23.     }  
  24. }  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     /// <summary>  
  9.     /// 父类  
  10.     /// </summary>  
  11.     public class Guests  
  12.     {  
  13.         /// <summary>  
  14.         /// 嘉宾姓名  
  15.         /// </summary>  
  16.         public string Name { get; set; }  
  17.   
  18.         public virtual void answer(object sender, QuestionArgs e)  
  19.         {  
  20.             Console.Write(“事件的发出者:” + (sender as Host).Name);  
  21.             Console.WriteLine(“问题是:” + e.Message);  
  22.         }  
  23.     }  
  24. }  

 

 

 

 

GuestC.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class GuestC:Guests  
  9.     {  
  10.         public override void answer(object sender, QuestionArgs e)  
  11.         {  
  12.             base.answer(sender, e);  
  13.             Console.WriteLine(“{0}伊始答题:作者不通晓”, this.Name);  
  14.         }  
  15.     }  
  16. }  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class GuestC:Guests  
  9.     {  
  10.         public override void answer(object sender, QuestionArgs e)  
  11.         {  
  12.             base.answer(sender, e);  
  13.             Console.WriteLine(“{0}起始答题:作者不知道”, this.Name);  
  14.         }  
  15.     }  
  16. }  

 

 

 

 

GuestB.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class GuestB:Guests  
  9.     {  
  10.         public override void answer(object sender, QuestionArgs e)  
  11.         {  
  12.             base.answer(sender, e);  
  13.             Console.WriteLine(“{0}开始答题:作者不明了”, this.Name);  
  14.         }  
  15.     }  
  16. }  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class GuestB:Guests  
  9.     {  
  10.         public override void answer(object sender, QuestionArgs e)  
  11.         {  
  12.             base.answer(sender, e);  
  13.             Console.WriteLine(“{0}初阶答题:作者不领悟”, this.Name);  
  14.         }  
  15.     }  
  16. }  

 

 

 

 

GuestA.cs

 

view
plain
copy to
clipboard
print?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class GuestA:Guests  
  9.     {  
  10.         public override void answer(object sender, QuestionArgs e)  
  11.         {  
  12.             base.answer(sender, e);  
  13.             Console.WriteLine(“{0}先导答题:小编不通晓”, this.Name);  
  14.         }  
  15.     }  
  16. }  

[csharp] view
plain
copyprint?

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace EventDemo  
  7. {  
  8.     class GuestA:Guests  
  9.     {  
  10.         public override void answer(object sender, QuestionArgs e)  
  11.         {  
  12.             base.answer(sender, e);  
  13.             Console.WriteLine(“{0}先导答题:笔者不了解”, this.Name);  
  14.         }  
  15.     }  
  16. }  

 

 

运作结果:

 

图片 7

相关文章