本篇將簡單的介紹一個在.NET中實現JSON的API,然後使用該API做個C/S ASP.NET的小練習。
Json.NET的簡單介紹
首先介紹一個為方便在.NET中使用JSON的API,Json.NET。它方便我們讀取從瀏覽器流向伺服器的JSON對象,也方便在響應流中寫入JSON對象。這裡下載:Json.NET。
Json.NET只提供了伺服器端的方法,主要有實現JSON文本與XML互相轉換的類,有自訂讀寫JSON的JsonReader類和JsonWriter類,還有一個非自訂讀寫JSON的JavaScriptSerializer類。
ASP.NET AJAX中,伺服器端由JavaScriptSerializer類的幾個方法來用於實現序列化和還原序列化能力。在Json.NET中,伺服器端的序列化和還原序列化能力則主要由JavaScriptConvert類的幾個方法提供。本篇的例子只使用了JavaScriptConvert。
- JavaScriptConvert
- Json.NET中,這個類用於序列化和還原序列化JavaScript對象。
- 這個類有兩個方法:
- SerializeObject(object value, params JsonConverter[] converters),序列化,它有個重載方法SerializeObject(object value)
- DeserializeObject(string value, Type type),還原序列化,它有個重載方法DeserializeObject(string value)
在用戶端,Json.NET未提供支援。如果需要則可以結合使用上一篇“What is JSON:初識JSON”提到的json.js來處理用戶端的系列化與還原序列化。
下面我們嘗試用這個API在ASP.NET中實現用JSON互動資料。
使用Json.NET在C/S中互動JSON資料的簡單例子
先建立一個ASP.NET 網站。
將下載到的Binary檔案夾中的Newtonsoft.Json.dll和Newtonsoft.Json.XML放入網站的bin檔案,當然要先建立bin檔案夾。然後對dll添加引用。
- 切 換到設計模式,從標準工具箱向頁面上添加三個Label,Text分別為EmployeeID、EmployeeName、EmployeeInfo;三 個Textbox,ID分別為txtID、txtName、txtInfo;然後添加一個Button,ID為btnToJSONString,Text 為Invoke ToJSONString;然後添加一個Textbox,ID為txtJSON,Textmode為MultiLine,rows設為5;接著再分別添加 一個Button和Textbox,ID為btnToObject、txtStrEmployee,Button的Text為Invoke ToStrEmployee。
- 添加一個WebService項目。
編寫一個Employee類,然後兩個WebMethod,接著在項目中對該Web服務添加引用。代碼如下:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using Newtonsoft.Json;class Employee
{
private string[] employeeInfo;
public int EmployeeID;
public string EmployeeName;
public string[] EmployeeInfo
{
get { return this.employeeInfo; }
set { this.employeeInfo = value;}
}
}
/**//// <summary>
/// WebService 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService {
public WebService () {
//如果使用設計的組件,請取消注釋以下行
//InitializeComponent();
}
[WebMethod]
public string ToJSONString(int employeeID, string employeeName, string[] employeeInfo)
{
Employee employee = new Employee();
employee.EmployeeID = employeeID;
employee.EmployeeName = employeeName;
employee.EmployeeInfo = employeeInfo;
return JavaScriptConvert.SerializeObject(employee);
}
[WebMethod]
public string ToStrEmployee(string strJSON)
{
Employee decerializedEmployee = (Employee)JavaScriptConvert.DeserializeObject(strJSON, typeof(Employee));
return "ID: " + decerializedEmployee.EmployeeID + " "
+ "Name: " + decerializedEmployee.EmployeeName + " "
+ "Info: " + decerializedEmployee.EmployeeInfo.GetValue(0).ToString()
}
}
成員的屬性類型分別為數字、字串和數組。
5、對兩個Button編寫事件代碼
protected void btnToJSONString_Click(object sender, EventArgs e)
{
MyServ.WebService MyWebServ = new MyServ.WebService();
string employeeJSON = MyWebServ.ToJSONString(Int32.Parse(txtID.Text), txtName.Text, txtInfo.Text.Split(','));
txtJSON.Text = employeeJSON;
}
protected void btnToStrEmployee_Click(object sender, EventArgs e)
{
MyServ.WebService MyWevServ = new MyServ.WebService();
string strEmployee = MyWevServ.ToStrEmployee(txtJSON.Text);
txtStrEmployee.Text = strEmployee;
}
6、按Ctrl + F5運行;在EmployeeID、EmployeeName、EmployeeInfo中輸入123、Hunts.C及一些個人資訊(用逗號隔開);點擊Invoke ToJSONString,經伺服器端序列化後,結果在txtJSON文字框中;然後點擊Invoke ToStrEmployee,此時txtJSON文字框中的JSON文本傳輸給伺服器端,伺服器端讀取該JSON並還原序列化成對象,而後在 txtStrEmployee中寫入Employee的成員值。
\
只需要知道json裡頭除了name(名稱)就是value(值),值有好幾種格式,如果是數字就不用加引號,如果加了引號就是字串,如果用[]包裹就是數組,如果出現{}就說明是嵌套的json。諸如此類。