使用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 { get; set; }
/// <summary>
/// 返回的数据
/// </summary>
public T Data { get; set; }
/// <summary>
/// 错误类型
/// </summary>
public string Error { get; set; }
/// <summary>
/// 返回的数据条数
/// </summary>
public int Count { get; set; }
/// <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));
}
}
}
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 { get; set; }
/// <summary>
/// 返回的数据
/// </summary>
public T Data { get; set; }
/// <summary>
/// 错误类型
/// </summary>
public string Error { get; set; }
/// <summary>
/// 返回的数据条数
/// </summary>
public int Count { get; set; }
/// <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>();
![](https://www.cnblogs.com/Images/dot.gif)
return new WebUtility.JsonResult<List<Model.CommonWord>>(true, null, lst, lst.Count).ToString();
![](https://www.cnblogs.com/Images/dot.gif)
return new WebUtility.JsonResult<List<Model.CommonWord>>(true, null, 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("连接服务器错误。");
}
});
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("连接服务器错误。");
}
});
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("连接服务器错误。");
}
});