json for .net(一)
来源:互联网 发布:js定时器只执行一次 编辑:程序博客网 时间:2024/05/22 03:09
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 (具体参见http://www.json.org/json-zh.html)
json格式的数据示例:
"{\"Name\":\"Apple\",\"Expiry\":\"2010-12-18T00:00:00\",\"Price\":3.99,\"Sizes\":[\"Small\",\"Medium\",\"Large\"]}"
利用.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 + "<br/>");//输出:{"Name":"ZhangSan","Age":20} //DeSerializer Employee p = jsonSerializer.Deserialize<Employee>(serializerEmp); Response.Write("id:"+p.Id.ToString() + ",Name:" + p.Name +",Age:"+ p.Age + "<br/>");//输出 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 + "<br/>");//输出:{"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 + "<br/>");//输出: Id:2,Name: }
- json for .net(一)
- Jayrock: JSON and JSON-RPC for .NET
- json for .net(二)开源的Json.Net库
- JayRock:JSON and JSON_RPC for .Net
- Json.NET使用入门(一)【序列化】
- String转换成json格式(一):net.sf.json.JSONObject
- Rational XDE For .NET 学习日志(一)
- MapXtreme for .net 学习总结(一)
- Spire.Doc for .NET 运用(一)
- JSON.NET Error Self referencing loop detected for type
- C# Json.net Self referencing loop detected for property
- jquery+ajax+json+asp.net学习笔记(一)
- asp.net webform 通过ajax取得json数据(一)
- MVC.Net一控制器放回Json给前台
- Json.NET
- Json.NET
- Json.net
- JSON.NET
- 如何在GeoServer中使用OpenStreetMap数据
- QML基础——在C++程序中使用QML
- Objective-C与JavaScript的交互
- 获取句柄的方法总结(尤其是对于dll而言)
- Windows Shell编程参考网址列表
- json for .net(一)
- Unrecognized Windows Sockets error: 0: JVM_Bind
- php函数--array_slice()
- 2010-06-04 16:34 typedef 和函数指针问题深入总结
- 安装Adobe CS5.5系列软件出错的解决办法
- 小谈vb中的(.)与(!)
- magento email:快速实现发送自定义邮件
- linux终端乱码解决方法
- PhoneGap 2.0 iOS开发环境搭建可能遇到的issue