概念
JSON是什么?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON 的优点
在 Web 开发方面,JSON 与 XML 相比主要有两个优点。首先,它更加简洁。JSON 对象是一系列以逗号分隔的 name:value 对,最外面有一对花括号。相反,XML 则使用重复的开始和结束标记包装数据值。因此,与相应的 JSON 相比,这样便产生了两倍的元数据开销,所以 Crockford 将 JSON 趣称为 “XML 的无脂替代品”(请参阅 参考资料)。当处理 Web 开发的 “细管道” 时,每次减少一些字节都可以带来实在的性能好处
一个简单的例子(基于3.5的net json)
Code
using System;
using Newtonsoft.Json;
namespace Jason
{
class Program
{
static void Main(string[] args)
{
Product product = new Product();
product.Name = "[]{}\\''\"\"Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string output =JsonConvert.SerializeObject(product);
Console.WriteLine("Product:");
Console.WriteLine(output);
//{// "Name": "Apple",// "Expiry": new Date(1230422400000),// "Price": 3.99,// "Sizes": [// "Small",// "Medium",// "Large"// ]//}
Product deserializedProduct = (Product)JsonConvert.DeserializeObject(output, typeof(Product));
string[] values = new string[] { "Small", "Medium", "Large" };
output = JsonConvert.SerializeObject(values);
Console.WriteLine("strings :");
Console.WriteLine(output);
string[] deserializedString = (string[])JsonConvert.DeserializeObject(output, typeof(string[]));
}
}
public class Product
{
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
private DateTime _Expiry;
public DateTime Expiry
{
get { return _Expiry; }
set { _Expiry = value; }
}
private decimal _Price;
public decimal Price
{
get { return _Price; }
set { _Price = value; }
}
private string[] _Sizes;
public string[] Sizes
{
get { return _Sizes; }
set { _Sizes = value; }
}
}
}