JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成。
JSON与XML的比较
◆可读性
JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解。
◆文件大小与传输
XML允许使用方便的标签,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以天生的主战场是Javascript与网络,在这里,JSON有着XML无法赶超的优势。
JSON语法
1. JSON 语法是 JavaScript 对象表示法语法的子集。
数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。
数据由逗号分隔:
花括号保存对象:对象可以包含各种数据,包括数组。
方括号保存数组:数字可以包含对象。
例如:
{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
}
]
}
2. 如果JSON中含有转义字符,则需要转义。例如文件路径中需要使用"\"而不是""。例如:{ "file":"C:\a.txt"}。
.NET操作JSON
原始方式:自己按照JSON的语法格式,写代码直接操作JSON字符串。如非必要,应该很少人会走这条路,从头再来的。
JSON文件读入到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。
.NET操作JSON通常有以下几种方式:
主要类
|
命名空间
|
限制
|
内建LINQ支持
|
DataContractJsonSerializer
|
System.Runtime.Serialization.Json
|
通用
|
否
|
JavaScriptSerializer
|
System.Web.Script.Serialization
|
只能在Web环境使用
|
否
|
JsonArray、JsonObject、JsonValue
|
System.Json
|
只能在Silverlight中使用
|
是
|
JsonConvert
、JArray、JObject、JValue、JProperty
|
Newtonsoft.Json
|
通用
|
是
|
代码事例:
1 using Newtonsoft.Json;
2 using System;
3 using System.Collections.Generic;
4 using System.IO;
5 using System.Runtime.Serialization.Json;
6 using System.Text;
7 using System.Text.RegularExpressions;
8 using System.Web.Script.Serialization;
9
10 namespace ConsoleApplication
11 {
12 public class JsonUtility
13 {
14 #region DataContractJsonSerializer System.Runtime.Serialization.Json
15 public static string DataContractJsonSerializer(object obj)
16 {
17 DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
18 using (MemoryStream stream = new MemoryStream())
19 {
20 json.WriteObject(stream, obj);
21 return Encoding.UTF8.GetString(stream.ToArray());
22 }
23 }
24
25 public static T DataContractJsonDeserialize<T>(string json)
26 {
27 T obj = Activator.CreateInstance<T>();
28 using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
29 {
30 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
31 return (T)serializer.ReadObject(ms);
32 }
33 }
34 #endregion
35
36 #region JavaScriptSerializer System.Web.Script.Serialization
37 public static string JavaScriptSerializer(object obj)
38 {
39 JavaScriptSerializer json = new JavaScriptSerializer();
40 var str = json.Serialize(obj);
41 str = Regex.Replace(str, @"\/Date((d+))\/", match =>
42 {
43 DateTime dt = new DateTime(1970, 1, 1);
44 dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
45 dt = dt.ToLocalTime();
46 return dt.ToString("yyyy-MM-dd HH:mm:ss");
47 });
48 return str;
49 }
50
51 public static T JavaScriptDeserialize<T>(string json)
52 {
53 JavaScriptSerializer serializer = new JavaScriptSerializer();
54 return serializer.Deserialize<T>(json);
55 }
56 #endregion
57
58 #region JsonConvert、JArray、JObject、JValue、JProperty Newtonsoft.Json
59 public static string SerializeObject(object obj)
60 {
61 var jsonSerializerSettings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd hh:mm:ss" };
62 return JsonConvert.SerializeObject(obj, jsonSerializerSettings);
63 }
64
65 public static T DeserializeObject<T>(string json)
66 {
67 return JsonConvert.DeserializeObject<T>(json);
68 }
69
70 public static dynamic DeserializeObject(string json)
71 {
72 return JsonConvert.DeserializeObject(json);
73 }
74 #endregion
75
76 public class Product
77 {
78 public string Name { get; set; }
79
80 public double Price { get; set; }
81
82 public DateTime DateTime { get; set; }
83 }
84
85 static void Main(string[] args)
86 {
87 var list = new List<Product>
88 {
89 new Product { Name = "苹果", Price = 4141 , DateTime = DateTime.Now },
90 new Product { Name = "荔枝", Price = 3544 , DateTime = DateTime.Now }
91 };
92 var str = DataContractJsonSerializer(list);
93 var products = DataContractJsonDeserialize<List<Product>>(str);
94
95 var str1 = JavaScriptSerializer(list);
96 var products1 = JavaScriptDeserialize<List<Product>>(str1);
97
98 var str2 = SerializeObject(list);
99 var products2 = DeserializeObject<List<Product>>(str1);
100 var products3 = DeserializeObject(str1);
101 }
102 }
103 }
JsonArray的方式实现 戳这里