logo资料库

新版Json.NET学习笔记.doc

第1页 / 共65页
第2页 / 共65页
第3页 / 共65页
第4页 / 共65页
第5页 / 共65页
第6页 / 共65页
第7页 / 共65页
第8页 / 共65页
资料共65页,剩余部分请下载后查看
Json.Net 完全解析
Json.Net 学习笔记(一) 初识json
Json.Net学习笔记(二) .net3.5自带序列化与反序列化
Json.Net学习笔记(三) ----使用Newtonsoft.Json库
Json.Net学习笔记(四)----------Linq to Json
Json学习笔记(五)------Json与Xml之间的转换
Json学习笔记(六)------Json对象的读写
Json.Net学习笔记(七)-----自定义Json序列化特性
Json.Net学习笔记(八)------Json.Net中关于时间的序列化
Json.Net学习笔记(九)------序列化集合
Json.Net学习笔记(十)------序列化的回调方法
Json.Net学习笔记(十二)------保持对象引用
Json.Net学习笔记(十三)------CustomCreationConverter
Json.Net学习笔记(十四)------协议解析
Json.Net学习笔记(十五)-----缩小序列化Json的大小
Json.Net学习笔记(十六)------JSON的部分序列化
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,添加到自己的工程中。
分享到:
收藏