zoukankan      html  css  js  c++  java
  • 构建返回友好信息的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(
    "连接服务器错误。");
       }
    });
  • 相关阅读:
    MFC Slider控件 去掉边上的虚线
    VC學習網址
    全局程序集缓存工具 (Gacutil.exe)
    滚动条集合
    调用 DialogBox 会失败解决方法
    全局程序集缓存GAC”是什么概念
    UltraVNC:超实用的远程控制工具(图)
    VC程序员之无法选择的命运
    C++类
    角色权限批量设置,随点!
  • 原文地址:https://www.cnblogs.com/yvesliao/p/1556012.html
Copyright © 2011-2022 走看看