JSON数据读写

363922298 贡献于2012-08-26

作者 Windows 用户  创建于2010-04-19 08:51:00   修改者Windows 用户  修改于2010-04-22 03:22:00字数6187

文档摘要:教学目的:理解JSON数据读写的类型掌握JSON数据读写各种方法教学内容:一、JSON数据读写的类型客户端读取JSON数据的方法读取服务器端一个对象数据读取服务器端一组对象数据发送并接受服务器端数据
关键词:

JSON数据读写 教学目的: 理解JSON数据读写的类型 掌握JSON数据读写各种方法 教学内容: 一、JSON数据读写的类型 1. 客户端读取JSON数据的方法 2. 读取服务器端一个对象数据 3. 读取服务器端一组对象数据 4. 发送并接受服务器端数据 二、JSON数据读写方法 1.客户端读取JSON数据的方法:将JSON数据文本变成JSON数据: eval(“var jsondata=”+jsondatatext); 用jsondata访问其中的数据,这种读写方法意义不大,大多数情况下,它应同服务器端交互。 function readlocaldata() { var val1="'软件专业'"; var val2="true"; var val3="23"; var arr="[12,34,56]"; var obj="{name:'张三',age:23}"; eval("var json="+val1+";");alert("我学的是"+json); eval("var json="+val2+";");alert(!json); eval("var json="+val3+";");alert(2*json); eval("var json="+arr+";");alert(json[1]); eval("var json="+obj+";");alert(json.name); } 2.服务器与客户端的JSON数据的交换。 网络数据交换格式选择JSON数据格式。 为将服务器端的JSON数据送到客户端,服务器端要进行序列化;为接受客户端的JSON文本格式数据服务器端要进行反序列化。服务器端序列化和反序列化操作需要JSON类库。搜索、下载、解压文件,得到Newtonsoft.Json.Net20.dll,并在项目中添加引用..。 一般步骤如下: 1. 导入JSON类库 2. 定义服务器端的实体类。 3. 定义服务器端的一般处理程序。 4. 定义客户端的请求页面。 为调用服务器端序列化和反序列化方法,需要定义相关的实体类。 定义实体类Product.cs public class Product { public string Name { get; set; } public DateTime Expiry { get; set; } public float Price { get; set; } public string[] Sizes { get; set; } } 定义实体类Person.cs public class Person { public string Name { get; set; } public int Age { get; set; } public Person(string name, int age) { Name = name; Age = age; } } 用一般处理程序ashx接受并响应客户端。 定义返回一个对象数据的服务器端处理程序GetProduct.ashx <%@ WebHandler Language="C#" Class="GetProduct" %> using System; using System.Web; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; public class GetProduct : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Price = 3.99F; product.Sizes = new string[] { "Small", "Medium", "Large" }; string output = JsonConvert.SerializeObject(product); context.Response.Write(output); } public bool IsReusable { get { return false; } } } 定义返回一组对象数据的服务器端处理程序 GetPersons.ashx <%@ WebHandler Language="C#" Class="GetPersons" %> using System; using System.Web; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; public class GetPersons : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; Person[] persons = new Person[]{ new Person("aa",32), new Person("bb",33), new Person("cc",34), new Person("dd",35)}; //序列化 string output = JsonConvert.SerializeObject(persons); context.Response.Write(output); } } 发送客户端请求数据并接受服务器端响应数据GetClientJSON.ashx <%@ WebHandler Language="C#" Class="GetClientJSON" %> using System; using System.Web; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; public class GetClientJSON : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //string jsonText = "{name:'aa',age:23}"; string jsonText = context.Request["person"]; //反序列化 Person person = (Person)JsonConvert.DeserializeObject(jsonText, typeof(Person)); context.Response.Write(person.Name+"
"+person.Age); } } 定义客户端页面,用AJAX方式请求并更新页面 读取服务器端数据GetServerData.htm 读写服务器端数据
作业: 举例说明JSON数据客户端解析方法 举例说明用JSON数据格式获取登录信息的过程。 从数据集中读取JSON数据 <%@ WebHandler Language="C#" Class="GetData" %> using System; using System.Web; using System.Data; using System.Data.SqlClient; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public class GetData : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; SqlConnection cnn = new SqlConnection("Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=123"); SqlDataAdapter adp = new SqlDataAdapter("SELECT CategoryID,CategoryName FROM Categories", cnn); DataSet ds = new DataSet(); adp.Fill(ds); DataRowCollection rows = ds.Tables[0].Rows; //直接序列化ds.Tables[0].Rows会产生许多的冗余信息。 Category[] Categories=new Category[rows.Count]; for (int i = 0; i < rows.Count; i++) Categories[i] = new Category((int)rows[i]["CategoryID"], rows[i]["CategoryName"].ToString()); context.Response.Write(JsonConvert.SerializeObject(Categories)); } public bool IsReusable { get { return false; } } //定义内部实体类 public class Category { int categoryID; public int CategoryID { get { return categoryID; } set { categoryID = value; } } string categoryName; public string CategoryName { get { return categoryName; } set { categoryName = value; } } public Category(int categoryID,string categoryName) { this.categoryID = categoryID; this.categoryName = categoryName; } } } 显示数据如下: [ {"CategoryID":1,"CategoryName":"Beverages"}, {"CategoryID":2,"CategoryName":"Condiments"}, {"CategoryID":3,"CategoryName":"Confections"}, {"CategoryID":4,"CategoryName":"Dairy Products"}, {"CategoryID":5,"CategoryName":"Grains/Cereals"}, {"CategoryID":6,"CategoryName":"Meat/Poultry"}, {"CategoryID":7,"CategoryName":"Produce"}, {"CategoryID":8,"CategoryName":"Seafood"} ]

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 4 人已下载

下载文档