Json.Net 完全解析
Json.Net 完全解析 ___________________________________________________ 1
Json.Net 学习笔记(一) 初识 json _______________________________________ 2
Json.Net 学习笔记(二) ________________________________________________ 5
Json.Net 学习笔记(三) ----使用 Newtonsoft.Json 库 _________________________ 8
Json.Net 学习笔记(四)----------Linq to Json _______________________________ 11
Json 学习笔记(五)------Json 与 Xml 之间的转换 __________________________ 13
Json 学习笔记(六)------Json 对象的读写 _________________________________ 16
Json.Net 学习笔记(七)-----自定义 Json 序列化特性 ________________________21
Json.Net 学习笔记(八)------Json.Net 中关于时间的序列化 __________________ 24
Json.Net 学习笔记(九)------序列化集合 _________________________________ 27
Json.Net 学习笔记(十)------序列化的回调方法 ___________________________ 31
Json.Net 学习笔记(十二)------保持对象引用 _____________________________ 41
Json.Net 学习笔记(十三)------CustomCreationConverter ____________________ 46
Json.Net 学习笔记(十四)------协议解析 _________________________________ 49
Json.Net 学习笔记(十五)-----缩小序列化 Json 的大小 ______________________51
Json.Net 学习笔记(十六)------JSON 的部分序列化 ________________________ 61
Json.Net 学习笔记(一) 初识 json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。
同时也易于机器解析和生成。它基于 JavaScript Programming Language, 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 具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)
结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结
束。值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、
对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量 Unicode 字符的集合,使用反斜线转义。一
个字符(character)即一个单独的字符串(character string)。
字符串(string)与 C 或者 Java 的字符串非常相似。
数值(number)也与 C 或者 Java 的数值非常相似。除去未曾使用的八进制与十六进制格
式。除去一些编码细节。
空白可以加入到任何符号之间。 以下描述了完整的语言。
Json.Net 学习笔记(二)
与反序列化
.net3.5 自带序列化
利用.Net 3.5自带的 JavaScriptSerializer 进行 JSON 序列化与反序列化
为了使用.Net 3.5自带的 JavaScriptSerializer,需要添加引用 System.ServiceModel.Web
和 System.Runtime.Serialization
using System.Web.Script.Serialization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
1.引入 System.Web.Script.Serialization 命名空间使用 JavaScriptSerializer 类实现简单的
序列化
定义一个需要序列化的类:
public class Employee
{
[ScriptIgnore]
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}//注:ScriptIgnore 特性用来标记不需要被序列化的属性
测试:
Employee emp = new Employee()
{
};
Id = 1,
Name = "ZhangSan",
Age = 20
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
//Serializer
string serializerEmp = jsonSerializer.Serialize(emp);
Response.Write(serializerEmp
+
"
");//
输
出:{"Name":"ZhangSan","Age":20}
//DeSerializer
Employee p = jsonSerializer.Deserialize(serializerEmp);
Response.Write("id:"+p.Id.ToString() + ",Name:" + p.Name +",Age:"+
p.Age + "
");//输出 id:0,Name:ZhangSan,Age:20
2.引入 System.Runtime.Serialization.Json 命名空间,使用 DataContractJsonSerializer 类
实现序列化
[DataContract]
public class People
{
[DataMember(Name = "id")]
public int Id { get; set; }
[IgnoreDataMember]
public string Name { get; set; }
}//注:可以使用 IgnoreDataMember 指定成员不被序列化,DataMember 定义序列化
属性参数。如果使用 DataMember 标记属性字段必须使用 DataContract 标记类,否则
DataMember 标记将不起作用
测试:
People people = new People() { Id = 2, Name = "LiSi" };
DataContractJsonSerializer
json
=
new
DataContractJsonSerializer(people.GetType());
string serializedPeople = "";
//Serializer
using (MemoryStream ms = new MemoryStream())
{
}
json.WriteObject(ms, people);
serializedPeople = Encoding.UTF8.GetString(ms.ToArray());
Response.Write(serializedPeople + "
");//输出:{"id":2}
//DeSerializer
using(MemoryStream
ms=
new
MemoryStream(Encoding.UTF8.GetBytes(serializedPeople)))
{
DataContractJsonSerializer
serializer
=
new
DataContractJsonSerializer(typeof(People));
People myPepole = serializer.ReadObject(ms) as People;
Response.Write("Id:"+myPepole.Id.ToString()
+
",Name:"
+
myPepole.Name + "
");//输出:
Id:2,Name:
}
Json.Net 学 习 笔 记 ( 三 )
Newtonsoft.Json 库
---- 使 用
使用 Newtonsoft.Json 这是一个开源的 Json.Net 库。
下载地址:http://json.codeplex.com/releases/view/50552。当前版本为 Release 8
从下载到的源代码中获取 Newtonsoft.Json.Net20.dll,添加到自己的工程中。