1.首先建一个WebService程序
/// <summary>/// WebService1 的摘要说明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。[System.Web.Script.Services.ScriptService]public class WebService1 : System.Web.Services.WebService{ [WebMethod] public string HelloWorld() { CommonData.Json.ObjectSerialization ser = new CommonData.Json.ObjectSerialization(); Student stu = new Student(); stu.Id = 1; stu.Name = "hechen"; string json = ser.EntityToJson(stu); return json; }}
[System.Web.Script.Services.ScriptService] 这里得注意,默认情况下这个特性是注释起来的,如果想用Javascript来调用WebService 就要取消这个注释
WebService 的内容不必多说,用Jquery调用WebService 返回肯定是一个xml。而xml是说明文件,而不是具体方法返回的值,所以我们做适当的处理。我们这里WebService方法返回的是JSON数据,以便在前台解析。下载是实体类序列化JSON的代码。
2. 实体对象序列化JSON
/** * * 2009-5-26 * 贺 臣 * * 将某个对象转化为Json数据格式 * */using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.ServiceModel.Web;using System.Runtime.Serialization;using System.Runtime.Serialization.Json;namespace CommonData.Json{ public class ObjectSerialization { private object _entity; /// <summary> /// 被序列化得实体对象 /// </summary> public object Entity { get { return _entity; } set { _entity = value; } } private string _jsonData; /// <summary> /// 被转化为json格式数据的对象 /// </summary> public string JsonData { get { return _jsonData; } set { _jsonData = value; } } /// <summary> /// 无参数构造方法 /// </summary> public ObjectSerialization() { } /// <summary> /// 有参数构造方法 /// </summary> /// <param name="entity">要被序列化得实体对象</param> public ObjectSerialization(object entity) { this._entity = entity; } /// <summary> /// 序列化实体对象 /// </summary> /// <returns></returns> public string EntityToJson() { var serializer = new DataContractJsonSerializer(Entity.GetType()); MemoryStream ms = new MemoryStream(); serializer.WriteObject(ms, Entity); byte[] myByte = new byte[ms.Length]; ms.Position = 0; ms.Read(myByte, 0, (int)ms.Length); string dataString = Encoding.UTF8.GetString(myByte); return dataString; } /// <summary> /// 序列化实体对象 /// </summary> /// <param name="entity">要被序列化得实体对象</param> /// <returns></returns> public string EntityToJson(object entity) { this._entity = entity; return EntityToJson(); } /// <summary> /// 将Json格式数据转换为对象 /// </summary> /// <returns></returns> public T GetObjectJson<T>() { MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(JsonData)); var serializer = new DataContractJsonSerializer(typeof(T)); T t = (T)serializer.ReadObject(ms); return t; } /// <summary> /// 将Json格式数据转换为对象 /// </summary> /// <param name="jsonData">json数据格式</param> /// <returns></returns> public T GetObjectJson<T>(string jsonData) { this._jsonData = jsonData; return GetObjectJson<T>(); } }}
新闻热点
疑难解答
图片精选