C# Json.Net解析实例


本文以一个简单的小例子,简述Json.Net的相关知识,仅供学习分享使用,如有不足之处,还请指正。

概述

Json.Net is a Popular high-performance JSON framework for .NET. 

Json.Net是当前比较流行的高效的Json解析的.Net框架。主要支持序列化,反序列化,手动解析,Linq等功能,可谓是功能强大而使用简单。

  • 使用方式:在项目中引入Newtonsoft.Json.dll文件即可里面的功能。
  • 常见功能:序列化与反序列化
  • 常用的类:JsonConvert,JsonSerializerSettings,JValue , JArray , JObject , Formatting , JTokenWriter , JToken

效果图

具体如下图所示【序列化和反序列化】:

核心代码

序列化和反序列化的代码如下

  1 public partial class JsonForm : Form
  2     {
  3         public JsonForm()
  4         {
  5             InitializeComponent();
  6         }
  7 
  8         /// 
  9         /// 序列化对象
 10         /// 
 11         /// 
 12         /// 
 13         private void btnSerializeObject_Click(object sender, EventArgs e)
 14         {
 15             Person p = new Person()
 16             {
 17                 Name = "Hexiang",
 18                 Birthday = DateTime.Parse("2017-02-20 14:30:00"),
 19                 Gender = "",
 20                 Love = "Ball"
 21             };
 22             string strJson = JsonConvert.SerializeObject(p, Formatting.Indented);
 23             this.txtJson.Text = strJson;
 24         }
 25 
 26         /// 
 27         /// 序列化字典
 28         /// 
 29         /// 
 30         /// 
 31         private void btnSerializeDictionary_Click(object sender, EventArgs e)
 32         {
 33             Dictionary<string, int> dicPoints = new Dictionary<string, int>(){
 34                 { "James", 9001 },
 35                 { "Jo", 3474 },
 36                 { "Jess", 11926 }
 37             };
 38 
 39             string strJson = JsonConvert.SerializeObject(dicPoints, Formatting.Indented);
 40 
 41             this.txtJson.Text = strJson;
 42 
 43         }
 44 
 45         /// 
 46         /// 序列化List
 47         /// 
 48         /// 
 49         /// 
 50         private void btnSerializeList_Click(object sender, EventArgs e)
 51         {
 52             List<string> lstGames = new List<string>()
 53             {
 54                  "Starcraft",
 55                  "Halo",
 56                  "Legend of Zelda"
 57             };
 58 
 59             string strJson = JsonConvert.SerializeObject(lstGames);
 60 
 61             this.txtJson.Text = strJson;
 62         }
 63 
 64         /// 
 65         /// 序列化到文件
 66         /// 
 67         /// 
 68         /// 
 69         private void btnSerializeToFile_Click(object sender, EventArgs e)
 70         {
 71             Person p = new Person()
 72             {
 73                 Name = "Hexiang",
 74                 Birthday = DateTime.Parse("2017-02-20 14:30:00"),
 75                 Gender = "",
 76                 Love = "Ball"
 77             };
 78             using (StreamWriter file = File.CreateText(@"d:\person.json"))
 79             {
 80                 JsonSerializer serializer = new JsonSerializer();
 81                 serializer.Serialize(file, p);
 82             }
 83         }
 84 
 85         /// 
 86         /// 序列化枚举
 87         /// 
 88         /// 
 89         /// 
 90         private void btnSerializeEnum_Click(object sender, EventArgs e)
 91         {
 92             List stringComparisons = new List
 93             {
 94                  StringComparison.CurrentCulture,
 95                  StringComparison.Ordinal
 96              };
 97 
 98             string jsonWithoutConverter = JsonConvert.SerializeObject(stringComparisons);
 99 
100             this.txtJson.Text = jsonWithoutConverter;//序列化出来是枚举所代表的整数值
101 
102 
103             string jsonWithConverter = JsonConvert.SerializeObject(stringComparisons, new StringEnumConverter());
104             this.txtJson.Text += "\r\n";
105             this.txtJson.Text += jsonWithConverter;//序列化出来是枚举所代表的文本值
106             // ["CurrentCulture","Ordinal"]
107 
108             List newStringComparsions = JsonConvert.DeserializeObject>(
109                jsonWithConverter,
110                 new StringEnumConverter());
111         }
112 
113         /// 
114         /// 序列化DataSet
115         /// 
116         /// 
117         /// 
118         private void btnSerializeDataSet_Click(object sender, EventArgs e)
119         {
120             DataSet dataSet = new DataSet("dataSet");
121             dataSet.Namespace = "NetFrameWork";
122             DataTable table = new DataTable();
123             DataColumn idColumn = new DataColumn("id", typeof(int));
124             idColumn.AutoIncrement = true;
125 
126             DataColumn itemColumn = new DataColumn("item");
127             table.Columns.Add(idColumn);
128             table.Columns.Add(itemColumn);
129             dataSet.Tables.Add(table);
130 
131             for (int i = 0; i < 2; i++)
132             {
133                 DataRow newRow = table.NewRow();
134                 newRow["item"] = "item " + i;
135                 table.Rows.Add(newRow);
136             }
137 
138             dataSet.AcceptChanges();
139 
140             string json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
141             this.txtJson.Text = json;
142         }
143 
144         /// 
145         /// 序列化JRaw
146         /// 
147         /// 
148         /// 
149         private void btnSerializeRaw_Click(object sender, EventArgs e)
150         {
151             JavaScriptSettings settings = new JavaScriptSettings
152             {
153                 OnLoadFunction = new JRaw("OnLoad"),
154                 OnUnloadFunction = new JRaw("function(e) { alert(e); }")
155             };
156 
157             string json = JsonConvert.SerializeObject(settings, Formatting.Indented);
158 
159             this.txtJson.Text = json;
160 
161         }
162 
163         /// 
164         /// 反序列化List
165         /// 
166         /// 
167         /// 
168         private void btnDeserializeList_Click(object sender, EventArgs e)
169         {
170             string json = @"['Starcraft','Halo','Legend of Zelda']";
171             List<string> videogames = JsonConvert.DeserializeObjectstring>>(json);
172             this.txtJson.Text = string.Join(", ", videogames.ToArray());
173         }
174 
175         /// 
176         /// 反序列化字典
177         /// 
178         /// 
179         /// 
180         private void btnDeserializeDictionary_Click(object sender, EventArgs e)
181         {
182             string json = @"{
183               'href': '/account/login.aspx',
184               'target': '_blank'
185              }";
186 
187             Dictionary<string, string> dicAttributes = JsonConvert.DeserializeObjectstring, string>>(json);
188 
189             this.txtJson.Text = dicAttributes["href"];
190             this.txtJson.Text += "\r\n";
191             this.txtJson.Text += dicAttributes["target"];
192 
193 
194         }
195 
196         /// 
197         /// 反序列化匿名类
198         /// 
199         /// 
200         /// 
201         private void btnDeserializeAnaymous_Click(object sender, EventArgs e)
202         {
203             var definition = new { Name = "" };
204 
205             string json1 = @"{'Name':'James'}";
206             var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);
207             this.txtJson.Text = customer1.Name;
208             this.txtJson.Text += "\r\n";
209 
210             string json2 = @"{'Name':'Mike'}";
211             var customer2 = JsonConvert.DeserializeAnonymousType(json2, definition);
212             this.txtJson.Text += customer2.Name;
213 
214         }
215 
216         /// 
217         /// 反序列化DataSet
218         /// 
219         /// 
220         /// 
221         private void btnDeserializeDataSet_Click(object sender, EventArgs e)
222         {
223             string json = @"{
224                'Table1': [
225                  {
226                   'id': 0,
227                   'item': 'item 0'
228                  },
229                  {
230                    'id': 1,
231                   'item': 'item 1'
232                 }
233               ]
234             }";
235 
236             DataSet dataSet = JsonConvert.DeserializeObject(json);
237 
238             DataTable dataTable = dataSet.Tables["Table1"];
239             this.txtJson.Text = dataTable.Rows.Count.ToString();
240 
241 
242             foreach (DataRow row in dataTable.Rows)
243             {
244                 this.txtJson.Text += "\r\n";
245                 this.txtJson.Text += (row["id"] + " - " + row["item"]);
246             }
247 
248         }
249 
250         /// 
251         /// 从文件反序列化
252         /// 
253         /// 
254         /// 
255         private void btnDeserializeFrmFile_Click(object sender, EventArgs e)
256         {
257             using (StreamReader file = File.OpenText(@"d:\person.json"))
258             {
259                 JsonSerializer serializer = new JsonSerializer();
260                 Person p = (Person)serializer.Deserialize(file, typeof(Person));
261                 this.txtJson.Text = p.Name;
262             }
263         }
264 
265         /// 
266         /// 反序列化带构造函数人类
267         /// 
268         /// 
269         /// 
270         private void btnDeserializeConstructor_Click(object sender, EventArgs e)
271         {
272             string json = @"{'Url':'http://www.google.com'}";
273 
274             //直接序列化会报错,需要设置JsonSerializerSettings中ConstructorHandling才可以。
275             Website website = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
276             {
277                 ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
278             });
279 
280             this.txtJson.Text = website.Url;
281 
282         }
283 
284         /// 
285         /// 反序列化对象,如果有构造函数中,创建对象,则用Json的进行替换
286         /// 
287         /// 
288         /// 
289         private void btnDeserializeObjectCreation_Click(object sender, EventArgs e)
290         {
291             //
292             string json = @"{
293                'Name': 'James',
294                'Offices': [
295                  'Auckland',
296                  'Wellington',
297                  'Christchurch'
298                ]
299              }";
300 
301             UserViewModel model1 = JsonConvert.DeserializeObject(json);
302 
303             this.txtJson.Text = string.Join(",", model1.Offices);//默认会重复
304             this.txtJson.Text += "\r\n";
305 
306             //每次从Json中创建新的对象
307             UserViewModel model2 = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
308             {
309                 ObjectCreationHandling = ObjectCreationHandling.Replace
310             });
311 
312             this.txtJson.Text = string.Join(",", model2.Offices);
313 
314         }
315 
316         /// 
317         /// 序列化默认值处理,没有赋值的则不序列化出来
318         /// 
319         /// 
320         /// 
321         private void btnSerializeDefautValue_Click(object sender, EventArgs e)
322         {
323             Person person = new Person();
324 
325             string jsonIncludeDefaultValues = JsonConvert.SerializeObject(person, Formatting.Indented);
326 
327             this.txtJson.Text=(jsonIncludeDefaultValues);//默认的序列化,带不赋值的属性
328 
329             this.txtJson.Text += "\r\n";
330 
331             string jsonIgnoreDefaultValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
332             {
333                 DefaultValueHandling = DefaultValueHandling.Ignore //去掉不赋值的属性
334             });
335 
336             this.txtJson.Text+=(jsonIgnoreDefaultValues);
337         }
338 
339         /// 
340         /// 如果实体类中没有对应属性,则如何处理
341         /// 
342         /// 
343         /// 
344         private void btnDeserializeMissingMember_Click(object sender, EventArgs e)
345         {
346             string json = @"{
347                'FullName': 'Dan Deleted',
348                'Deleted': true,
349                'DeletedDate': '2013-01-20T00:00:00'
350              }";
351 
352             try
353             {
354                 JsonConvert.DeserializeObject(json, new JsonSerializerSettings
355                 {
356                     MissingMemberHandling = MissingMemberHandling.Error //要么忽略,要么报错
357                 });
358             }
359             catch (JsonSerializationException ex)
360             {
361                 this.txtJson.Text=(ex.Message);
362                 // Could not find member 'DeletedDate' on object of type 'Account'. Path 'DeletedDate', line 4, position 23.
363             }
364         }
365 
366         /// 
367         /// 序列化时Null值的处理
368         /// 
369         /// 
370         /// 
371         private void btnSerializeNull_Click(object sender, EventArgs e)
372         {
373             Person person = new Person
374             {
375                 Name = "Nigal Newborn"
376             };
377 
378             //默认的序列化
379             string jsonIncludeNullValues = JsonConvert.SerializeObject(person, Formatting.Indented);
380 
381             this.txtJson.Text=(jsonIncludeNullValues);
382             this.txtJson.Text += "\r\n";
383 
384             //去掉Null值的序列化
385             string jsonIgnoreNullValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
386             {
387                 NullValueHandling = NullValueHandling.Ignore //可以忽略,可以包含
388             });
389 
390            this.txtJson.Text+=(jsonIgnoreNullValues);
391            
392         }
393 
394         /// 
395         /// 序列化日期格式
396         /// 
397         /// 
398         /// 
399         private void btnSerializeDateTime_Click(object sender, EventArgs e)
400         {
401             DateTime mayanEndOfTheWorld = new DateTime(2012, 12, 21);
402 
403             string jsonIsoDate = JsonConvert.SerializeObject(mayanEndOfTheWorld);
404 
405             this.txtJson.Text = (jsonIsoDate);
406 
407             this.txtJson.Text += "\r\n";
408             string jsonMsDate = JsonConvert.SerializeObject(mayanEndOfTheWorld, new JsonSerializerSettings
409             {
410                 DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
411             });
412 
413             this.txtJson.Text += (jsonMsDate);
414             // "\/Date(1356044400000+0100)\/"
415             this.txtJson.Text += "\r\n";
416             string json = JsonConvert.SerializeObject(mayanEndOfTheWorld, new JsonSerializerSettings
417             {
418                 DateFormatString = "yyyy-MM-dd",
419                 Formatting = Formatting.Indented
420             });
421             this.txtJson.Text += json;
422         }
423 
424         private void btnSerializeDateZone_Click(object sender, EventArgs e)
425         {
426             Flight flight = new Flight
427             {
428                 Destination = "Dubai",
429                 DepartureDate = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Unspecified),
430                 DepartureDateUtc = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Utc),
431                 DepartureDateLocal = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Local),
432                 Duration = TimeSpan.FromHours(5.5)
433             };
434 
435             string jsonWithRoundtripTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
436             {
437                 DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
438             });
439 
440             this.txtJson.Text=(jsonWithRoundtripTimeZone);
441             this.txtJson.Text += "\r\n";
442             string jsonWithLocalTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
443             {
444                 DateTimeZoneHandling = DateTimeZoneHandling.Local
445             });
446 
447             this.txtJson.Text+=(jsonWithLocalTimeZone);
448             this.txtJson.Text += "\r\n";
449 
450             string jsonWithUtcTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
451             {
452                 DateTimeZoneHandling = DateTimeZoneHandling.Utc
453             });
454 
455             this.txtJson.Text += (jsonWithUtcTimeZone);
456             this.txtJson.Text += "\r\n";
457 
458             string jsonWithUnspecifiedTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
459             {
460                 DateTimeZoneHandling = DateTimeZoneHandling.Unspecified
461             });
462 
463             this.txtJson.Text += (jsonWithUnspecifiedTimeZone);
464 
465         }
466 
467         private void btnSerializeDataContract_Click(object sender, EventArgs e)
468         {
469             CFile file = new CFile
470             {
471                 Id = Guid.NewGuid(),
472                 Name = "ImportantLegalDocuments.docx",
473                 Size = 50 * 1024
474             };
475 
476             string json = JsonConvert.SerializeObject(file, Formatting.Indented);
477 
478             this.txtJson.Text=(json);
479         }
480 
481         /// 
482         /// 序列化默认设置
483         /// 
484         /// 
485         /// 
486         private void btnSerializeDefaultSetting_Click(object sender, EventArgs e)
487         {
488             // settings will automatically be used by JsonConvert.SerializeObject/DeserializeObject
489             JsonConvert.DefaultSettings = () => new JsonSerializerSettings
490             {
491                 Formatting = Formatting.Indented,
492                 ContractResolver = new CamelCasePropertyNamesContractResolver()
493             };
494 
495             Person s = new Person()
496             {
497                 Name = "Eric",
498                 Birthday = new DateTime(1980, 4, 20, 0, 0, 0, DateTimeKind.Utc),
499                 Gender = "",
500                 Love = "Web Dude"
501             };
502 
503             string json = JsonConvert.SerializeObject(s);
504             this.txtJson.Text = json;
505         }
506 
507         /// 
508         /// 序列化Immutable
509         /// 
510         /// 
511         /// 
512         private void btnSerializeImmutable_Click(object sender, EventArgs e)
513         {
514             //ImmutableList l = ImmutableList.CreateRange(new List
515             // {
516             //                   "One",
517             //     "II",
518             //     "3"
519             // });
520 
521             //string json = JsonConvert.SerializeObject(l, Formatting.Indented);
522 
523         }
524 
525         /// 
526         /// 序列化JsonProperty
527         /// 
528         /// 
529         /// 
530         private void btnSerializeJsonProperty_Click(object sender, EventArgs e)
531         {
532             Videogame starcraft = new Videogame
533             {
534                 Name = "Starcraft",
535                 ReleaseDate = new DateTime(1998, 1, 1)
536             };
537 
538             string json = JsonConvert.SerializeObject(starcraft, Formatting.Indented);
539 
540             this.txtJson.Text = json;
541         }
542 
543         /// 
544         /// 序列化排序,值越小,月靠前,默认是0
545         /// 
546         /// 
547         /// 
548         private void btnSerializeOrder_Click(object sender, EventArgs e)
549         {
550             Account0 account = new Account0
551             {
552                 FullName = "Aaron Account",
553                 EmailAddress = "aaron@example.com",
554                 Deleted = true,
555                 DeletedDate = new DateTime(2013, 1, 25),
556                 UpdatedDate = new DateTime(2013, 1, 25),
557                 CreatedDate = new DateTime(2010, 10, 1)
558             };
559 
560             string json = JsonConvert.SerializeObject(account, Formatting.Indented);
561 
562             this.txtJson.Text=(json);
563 
564         }
565 
566         private void btnSerializeJsonConstructor_Click(object sender, EventArgs e)
567         {
568             string json = @"{
569               ""UserName"": ""domain\\username"",
570               ""Enabled"": true
571             }";
572 
573             User user = JsonConvert.DeserializeObject(json);
574 
575             this.txtJson.Text=(user.UserName);
576 
577         }
578 
579         private void btnSerializeJsonIgnore_Click(object sender, EventArgs e)
580         {
581             Account1 account = new Account1
582             {
583                 FullName = "Joe User",
584                 EmailAddress = "joe@example.com",
585                 PasswordHash = "VHdlZXQgJ1F1aWNrc2lsdmVyJyB0byBASmFtZXNOSw=="
586             };
587 
588             string json = JsonConvert.SerializeObject(account);
589             this.txtJson.Text = json;
590         }
591 
592         /// 
593         /// 其他功能
594         /// 
595         /// 
596         /// 
597         private void btnOtherFunction_Click(object sender, EventArgs e)
598         {
599             JsonForm1 jsonOther = new JsonForm1();
600             jsonOther.ShowDialog();
601         }
602     }

其他功能


具体如下图所示【其他功能】:

其他功能代码如下

  1 public partial class JsonForm1 : Form
  2     {
  3         public JsonForm1()
  4         {
  5             InitializeComponent();
  6         }
  7 
  8         /// 
  9         /// 手动创建Json
 10         /// 
 11         /// 
 12         /// 
 13         private void btnCreateJsonManually_Click(object sender, EventArgs e)
 14         {
 15             JArray array = new JArray();
 16             array.Add("Manual text");
 17             array.Add(new DateTime(2000, 5, 23));
 18 
 19             JObject o = new JObject();
 20             o["MyArray"] = array;
 21 
 22             string json = o.ToString();
 23             this.txtJson.Text = json;
 24 
 25         }
 26         
 27         /// 
 28         /// 列表创建Json
 29         /// 
 30         /// 
 31         /// 
 32         private void btnCollectionJson_Click(object sender, EventArgs e)
 33         {
 34             JObject o = new JObject()
 35             {
 36                 { "Cpu", "Intel" },
 37                 { "Memory", 32 },
 38                 {
 39                     "Drives", new JArray
 40                     {
 41                     "DVD",
 42                     "SSD"
 43                     }
 44                 }
 45             };
 46 
 47             this.txtJson.Text = o.ToString();
 48         }
 49 
 50         private void btnCreateJsonByDynamic_Click(object sender, EventArgs e)
 51         {
 52             dynamic product = new JObject();
 53             product.ProductName = "Elbow Grease";
 54             product.Enabled = true;
 55             product.Price = 4.90m;
 56             product.StockCount = 9000;
 57             product.StockValue = 44100;
 58             product.Tags = new JArray("Real", "OnSale");
 59             this.txtJson.Text = product.ToString();
 60 
 61         }
 62         
 63         /// 
 64         /// 从JTokenWriter创建Json
 65         /// 
 66         /// 
 67         /// 
 68         private void btnJTokenWriter_Click(object sender, EventArgs e)
 69         {
 70             JTokenWriter writer = new JTokenWriter();
 71             writer.WriteStartObject();
 72             writer.WritePropertyName("name1");
 73             writer.WriteValue("value1");
 74             writer.WritePropertyName("name2");
 75             writer.WriteStartArray();
 76             writer.WriteValue(1);
 77             writer.WriteValue(2);
 78             writer.WriteEndArray();
 79             writer.WriteEndObject();
 80 
 81             JObject o = (JObject)writer.Token;
 82 
 83             this.txtJson.Text = o.ToString();
 84         }
 85 
 86         /// 
 87         /// 从对象创建Json
 88         /// 
 89         /// 
 90         /// 
 91         private void btnCreateJsonFromObject_Click(object sender, EventArgs e)
 92         {
 93             JValue i = (JValue)JToken.FromObject(12345);
 94 
 95             Console.WriteLine(i.Type);
 96             // Integer
 97             Console.WriteLine(i.ToString());
 98             // 12345
 99 
100             JValue s = (JValue)JToken.FromObject("A string");
101 
102             Console.WriteLine(s.Type);
103             // String
104             Console.WriteLine(s.ToString());
105             // A string
106 
107             Computer computer = new Computer
108             {
109                 Cpu = "Intel",
110                 Memory = 32,
111                 Drives = new List<string>
112                 {
113                     "DVD",
114                     "SSD"
115                 }
116              };
117 
118             JObject o = (JObject)JToken.FromObject(computer);
119 
120             Console.WriteLine(o.ToString());
121             // {
122             //   "Cpu": "Intel",
123             //   "Memory": 32,
124             //   "Drives": [
125             //     "DVD",
126             //     "SSD"
127             //   ]
128             // }
129 
130             JArray a = (JArray)JToken.FromObject(computer.Drives);
131 
132             Console.WriteLine(a.ToString());
133             // [
134             //   "DVD",
135             //   "SSD"
136             // ]
137         }
138 
139         /// 
140         /// 从匿名对象创建
141         /// 
142         /// 
143         /// 
144         private void btnCreateFromAnaymous_Click(object sender, EventArgs e)
145         {
146             List posts = new List
147             {
148                 new Post
149                 {
150                     Title = "Episode VII",
151                     Description = "Episode VII production",
152                     Categories = new List<string>
153                     {
154                         "episode-vii",
155                         "movie"
156                     },
157                     Link = "episode-vii-production.aspx"
158                 }
159             };
160 
161             JObject o = JObject.FromObject(new
162             {
163                 channel = new
164                 {
165                     title = "Star Wars",
166                     link = "http://www.starwars.com",
167                     description = "Star Wars blog.",
168                     item =
169                         from p in posts
170                         orderby p.Title
171                         select new
172                         {
173                             title = p.Title,
174                             description = p.Description,
175                             link = p.Link,
176                             category = p.Categories
177                         }
178                 }
179             });
180 
181             this.txtJson.Text=o.ToString();
182 
183         }
184 
185         /// 
186         /// Parse
187         /// 
188         /// 
189         /// 
190         private void btnJArrayParse_Click(object sender, EventArgs e)
191         {
192             string json = @"[
193                'Small',
194                'Medium',
195                'Large'
196              ]";
197 
198             JArray a = JArray.Parse(json);
199 
200             this.txtJson.Text = a.ToString();
201             this.txtJson.Text += "\r\n";
202 
203             json = @"{
204                CPU: 'Intel',
205                Drives: [
206                  'DVD read/writer',
207                  '500 gigabyte hard drive'
208                ]
209              }";
210 
211             JObject o = JObject.Parse(json);
212 
213             this.txtJson.Text += o.ToString();
214 
215             JToken t1 = JToken.Parse("{}");
216 
217             Console.WriteLine(t1.Type);
218             // Object
219 
220             JToken t2 = JToken.Parse("[]");
221 
222             Console.WriteLine(t2.Type);
223             // Array
224 
225             JToken t3 = JToken.Parse("null");
226 
227             Console.WriteLine(t3.Type);
228             // Null
229 
230             JToken t4 = JToken.Parse(@"'A string!'");
231 
232             Console.WriteLine(t4.Type);
233             // String
234         }
235 
236         private void btnDeserializeJsonLinq_Click(object sender, EventArgs e)
237         {
238             string json = @"[
239                {
240                  'Title': 'Json.NET is awesome!',
241                  'Author': {
242                    'Name': 'James Newton-King',
243                    'Twitter': '@JamesNK',
244                    'Picture': '/jamesnk.png'
245                  },
246                  'Date': '2013-01-23T19:30:00',
247                 'BodyHtml': '<h3>Title!</h3>\r\n<p>Content!</p>'
248               }
249             ]";
250 
251             JArray blogPostArray = JArray.Parse(json);
252 
253             IList blogPosts = blogPostArray.Select(p => new BlogPost
254             {
255                 Title = (string)p["Title"],
256                 AuthorName = (string)p["Author"]["Name"],
257                 AuthorTwitter = (string)p["Author"]["Twitter"],
258                 PostedDate = (DateTime)p["Date"],
259                 Body = HttpUtility.HtmlDecode((string)p["BodyHtml"])
260             }).ToList();
261 
262             this.txtJson.Text=(blogPosts[0].Body);
263 
264         }
265 
266         private void btnSerializeJson_Click(object sender, EventArgs e)
267         {
268             IList blogPosts = new List
269              {
270                  new BlogPost
271                  {
272                      Title = "Json.NET is awesome!",
273                      AuthorName = "James Newton-King",
274                      AuthorTwitter = "JamesNK",
275                      PostedDate = new DateTime(2013, 1, 23, 19, 30, 0),
276                      Body = @"

Title!

277

Content!

" 278 } 279 }; 280 281 JArray blogPostsArray = new JArray( 282 blogPosts.Select(p => new JObject 283 { 284 { "Title", p.Title }, 285 { 286 "Author", new JObject 287 { 288 { "Name", p.AuthorName }, 289 { "Twitter", p.AuthorTwitter } 290 } 291 }, 292 { "Date", p.PostedDate 293 }, 294 { "BodyHtml", HttpUtility.HtmlEncode(p.Body) }, 295 }) 296 ); 297 298 this.txtJson.Text=(blogPostsArray.ToString()); 299 300 } 301 302 /// 303 /// 修改Json 304 /// 305 /// 306 /// 307 private void btnModifyJson_Click(object sender, EventArgs e) 308 { 309 string json = @"{ 310 'channel': { 311 'title': 'Star Wars', 312 'link': 'http://www.starwars.com', 313 'description': 'Star Wars blog.', 314 'obsolete': 'Obsolete value', 315 'item': [] 316 } 317 }"; 318 319 JObject rss = JObject.Parse(json); 320 321 JObject channel = (JObject)rss["channel"]; 322 323 channel["title"] = ((string)channel["title"]).ToUpper(); 324 channel["description"] = ((string)channel["description"]).ToUpper(); 325 326 channel.Property("obsolete").Remove(); 327 328 channel.Property("description").AddAfterSelf(new JProperty("new", "New value")); 329 330 JArray item = (JArray)channel["item"]; 331 item.Add("Item 1"); 332 item.Add("Item 2"); 333 334 this.txtJson.Text=rss.ToString(); 335 } 336 337 /// 338 /// 合并Json 339 /// 340 /// 341 /// 342 private void btnMergeJson_Click(object sender, EventArgs e) 343 { 344 JObject o1 = JObject.Parse(@"{ 345 'FirstName': 'John', 346 'LastName': 'Smith', 347 'Enabled': false, 348 'Roles': [ 'User' ] 349 }"); 350 JObject o2 = JObject.Parse(@"{ 351 'Enabled': true, 352 'Roles': [ 'User', 'Admin' ] 353 }"); 354 355 o1.Merge(o2, new JsonMergeSettings 356 { 357 // union array values together to avoid duplicates 358 MergeArrayHandling = MergeArrayHandling.Union 359 }); 360 361 this.txtJson.Text = o1.ToString(); 362 } 363 364 /// 365 /// 查询Json 366 /// 367 /// 368 /// 369 private void btnQueryJson_Click(object sender, EventArgs e) 370 { 371 string json = @"{ 372 'channel': { 373 'title': 'James Newton-King', 374 'link': 'http://james.newtonking.com', 375 'description': 'James Newton-King\'s blog.', 376 'item': [ 377 { 378 'title': 'Json.NET 1.3 + New license + Now on CodePlex', 379 'description': 'Annoucing the release of Json.NET 1.3, the MIT license and the source on CodePlex', 380 'link': 'http://james.newtonking.com/projects/json-net.aspx', 381 'category': [ 382 'Json.NET', 383 'CodePlex' 384 ] 385 }, 386 { 387 'title': 'LINQ to JSON beta', 388 'description': 'Annoucing LINQ to JSON', 389 'link': 'http://james.newtonking.com/projects/json-net.aspx', 390 'category': [ 391 'Json.NET', 392 'LINQ' 393 ] 394 } 395 ] 396 } 397 }"; 398 399 JObject rss = JObject.Parse(json); 400 401 string rssTitle = (string)rss["channel"]["title"]; 402 403 Console.WriteLine(rssTitle); 404 // James Newton-King 405 406 string itemTitle = (string)rss["channel"]["item"][0]["title"]; 407 408 Console.WriteLine(itemTitle); 409 // Json.NET 1.3 + New license + Now on CodePlex 410 411 JArray categories = (JArray)rss["channel"]["item"][0]["category"]; 412 413 Console.WriteLine(categories); 414 // [ 415 // "Json.NET", 416 // "CodePlex" 417 // ] 418 419 string[] categoriesText = categories.Select(c => (string)c).ToArray(); 420 421 Console.WriteLine(string.Join(", ", categoriesText)); 422 // Json.NET, CodePlex 423 } 424 425 private void btnQueryWithLinq_Click(object sender, EventArgs e) 426 { 427 string json = @"{ 428 'channel': { 429 'title': 'James Newton-King', 430 'link': 'http://james.newtonking.com', 431 'description': 'James Newton-King\'s blog.', 432 'item': [ 433 { 434 'title': 'Json.NET 1.3 + New license + Now on CodePlex', 435 'description': 'Annoucing the release of Json.NET 1.3, the MIT license and the source on CodePlex', 436 'link': 'http://james.newtonking.com/projects/json-net.aspx', 437 'category': [ 438 'Json.NET', 439 'CodePlex' 440 ] 441 }, 442 { 443 'title': 'LINQ to JSON beta', 444 'description': 'Annoucing LINQ to JSON', 445 'link': 'http://james.newtonking.com/projects/json-net.aspx', 446 'category': [ 447 'Json.NET', 448 'LINQ' 449 ] 450 } 451 ] 452 } 453 }"; 454 455 JObject rss = JObject.Parse(json); 456 457 var postTitles = 458 from p in rss["channel"]["item"] 459 select (string)p["title"]; 460 461 foreach (var item in postTitles) 462 { 463 Console.WriteLine(item); 464 } 465 //LINQ to JSON beta 466 //Json.NET 1.3 + New license + Now on CodePlex 467 468 var categories = 469 from c in rss["channel"]["item"].Children()["category"].Values<string>() 470 group c by c 471 into g 472 orderby g.Count() descending 473 select new { Category = g.Key, Count = g.Count() }; 474 475 foreach (var c in categories) 476 { 477 Console.WriteLine(c.Category + " - Count: " + c.Count); 478 } 479 //Json.NET - Count: 2 480 //LINQ - Count: 1 481 //CodePlex - Count: 1 482 } 483 484 private void btnJsonToXml_Click(object sender, EventArgs e) 485 { 486 string json = @"{ 487 '@Id': 1, 488 'Email': 'james@example.com', 489 'Active': true, 490 'CreatedDate': '2013-01-20T00:00:00Z', 491 'Roles': [ 492 'User', 493 'Admin' 494 ], 495 'Team': { 496 '@Id': 2, 497 'Name': 'Software Developers', 498 'Description': 'Creators of fine software products and services.' 499 } 500 }"; 501 502 XNode node = JsonConvert.DeserializeXNode(json, "Root"); 503 504 this.txtJson.Text=(node.ToString()); 505 506 } 507 508 private void btnXmlToJson_Click(object sender, EventArgs e) 509 { 510 string xml = @"<?xml version='1.0' standalone='no'?> 511 512 513 Alan 514 http://www.google.com 515 516 517 Louis 518 http://www.yahoo.com 519 520 "; 521 522 XmlDocument doc = new XmlDocument(); 523 doc.LoadXml(xml); 524 525 string json = JsonConvert.SerializeXmlNode(doc); 526 527 this.txtJson.Text=json; 528 } 529 }


备注:

关于Json的功能有很多,这里只是列举了一些基本的例子,其他的功能需要自己在用到的时候去查阅相关文档了。

关于使用说明文档可以去官网【http://www.newtonsoft.com/json】查看。Samples实例的网址如下:http://www.newtonsoft.com/json/help/html/Samples.htm

--------------------------------------------------------------------------------

相关