构建返回友好信息的WebService

使用WebService的时候,如果要提示友好的信息比较困难,如果抛出异常,调用方则很难得到例如“部门名称不能为数字”,“此用户已被占用”之类的友好提示。所以WebService是不能抛出异常的,如果使用抛出异常,则调用方只能使用“**失败”之类的提示,这样就很不友好了。怎么办呢?我们可以不让WebService抛出异常,而只返回字符串,返回的字符串中包含是否成功,失败的原因等信息。

首先自定义一个泛型类,此类就是要返回的信息,包括是否成功,数据,数据条数,错误类型。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;

namespace WebUtility
{
    
/// <summary>
    
/// json格式的操作结果
    
/// </summary>
    
/// <typeparam name="T">数据格式</typeparam>
    public class JsonResult<T>
    {
        
/// <summary>
        
/// 是否成功
        
/// </summary>
        public bool Success { getset; }

        
/// <summary>
        
/// 返回的数据
        
/// </summary>
        public T Data { getset; }

        
/// <summary>
        
/// 错误类型
        
/// </summary>
        public string Error { getset; }

        
/// <summary>
        
/// 返回的数据条数
        
/// </summary>
        public int Count { getset; }

        
/// <summary>
        
/// 构造一个实体
        
/// </summary>
        public JsonResult()
        { }

        
/// <summary>
        
/// 构造一个实体
        
/// </summary>
        
/// <param name="success">是否成功</param>
        public JsonResult(bool success)
        {
            
this.Success = success;
        }

        
/// <summary>
        
/// 构造一个实体
        
/// </summary>
        
/// <param name="success">是否成功</param>
        
/// <param name="error">错误类型</param>
        public JsonResult(bool success, string error)
        {
            
this.Success = success;
            
this.Error = error;
        }

        
/// <summary>
        
/// 构造一个实体
        
/// </summary>
        
/// <param name="success">是否成功</param>
        
/// <param name="error">错误类型</param>
        
/// <param name="data">返回的数据</param>
        public JsonResult(bool success, string error, T data)
        {
            
this.Success = success;
            
this.Data = data;
            
this.Error = error;
        }

        
/// <summary>
        
/// 构造一个实体
        
/// </summary>
        
/// <param name="success">是否成功</param>
        
/// <param name="error">错误类型</param>
        
/// <param name="data">返回的数据</param>
        
/// <param name="count">数据的条数</param>
        public JsonResult(bool success, string error, T data, int count)
        {
            
this.Success = success;
            
this.Data = data;
            
this.Count = count;
            
this.Error = error;
        }

        
/// <summary>
        
/// 构造一个实体
        
/// </summary>
        
/// <param name="jsonString">json字符串</param>
        public JsonResult(string jsonString)
        {
            JavaScriptSerializer js 
= new JavaScriptSerializer();
            JsonResult
<T> result = js.Deserialize<JsonResult<T>>(jsonString);

            
this.Success = result.Success;
            
this.Data = result.Data;
            
this.Error = result.Error;
            
this.Count = result.Count;
        }

        
/// <summary>
        
/// 转化为json字符串
        
/// </summary>
        public override string ToString()
        {
            
return string.Format("{{success:{0},error:\"{1}\",count:{2},data:{3}}}",
        
this.Success.ToString().ToLower(),
        StringHelper.GetTransferMeaning(
this.Error),
        
this.Count,
        
new JavaScriptSerializer().Serialize(this.Data));
        }
    }
}


序列化成JSON数据的方法:

List<Model.CommonWord> lst = new List<Model.CommonWord>();

return new WebUtility.JsonResult<List<Model.CommonWord>>(truenull, lst, lst.Count).ToString();


客户端获得字符串结果后,反序列化成对象的方法:

WebUtility.JsonResult<List<string>> result = new WebUtility.JsonResult<List<string>>(s);


客户端使用jQuery调用的方法:
方法一、获得默认的XML数据

$.ajax({
   type: 
"post",
   url: 
"Services/KeyWord.asmx/GetAlias",
   dataType: 
"xml",
   data: { a: a, b: b, c: c },
   success: 
function(data) {
       
//获取json对象
       var json = eval("(" + data.text + ")");

       
if (json.success) {
           
//成功时的操作
       }
       
else
           
//失败时的操作
   },
   error: 
function(data) {
       alert(
"连接服务器错误。");
   }
});


方法二、获得json数据

$.ajax({
   type: 
"post",
   url: 
"Services/KeyWord.asmx/GetAlias",
   dataType: 
"json",
   contentType:
"application/json",
   data: { a: a, b: b, c: c },
   success: 
function(data) {
       
//获取json对象
       var json = eval("(" + data.d + ")");

       
if (json.success) {
           
//成功时的操作
       }
       
else
           
//失败时的操作
   },
   error: 
function(data) {
       alert(
"连接服务器错误。");
   }
});

 

posted on 2009-08-28 20:58  廖勇军  阅读(583)  评论(1)    收藏  举报

导航