四个主要操作类:JsonConverter 、JsonHelper 、JsonSplit 、AjaxResult

一、JsonConverter:

自定义查询对象转换动态类、object动态类转换json包、json转换object动态类、DataReader转换为Json、DataSet转换为Json、DataTable转成Json、Datatable转换为Json 、格式化字符型日期型布尔型、过滤特殊字符等

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using System.Web.Script.Serialization;
using System.Collections; namespace Common
{
public class JsonConverter
{ /// <summary>
/// 自定义查询对象转换动态类
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static dynamic JsonClass(object obj)
{
return ConvertJson(Serialize(obj, true));
} /// <summary>
/// object动态类转换json包
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="obj">对象</param>
/// <param name="DateConvert">时间戳是否转换成日期类型</param>
/// <returns></returns>
public static string Serialize(object obj, bool DateConvert = false)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
var str = jss.Serialize(obj);
if (DateConvert)
{
str = System.Text.RegularExpressions.Regex.Replace(str, @"\\/Date\((\d+)\)\\/", match =>
{
DateTime dt = new DateTime(, , );
dt = dt.AddMilliseconds(long.Parse(match.Groups[].Value));
dt = dt.ToLocalTime();
return dt.ToString("yyyy-MM-dd HH:mm:ss");
});
}
return str;
} /// <summary>
/// json转换object动态类
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static dynamic ConvertJson(string json)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() });
dynamic dy = jss.Deserialize(json, typeof(object)) as dynamic;
return dy;
} /// <summary>
/// DataReader转换为Json
/// </summary>
/// <param name="dataReader">DataReader对象</param>
/// <returns>Json字符串</returns>
public static string ToJson(IDataReader dataReader)
{
try
{
StringBuilder jsonString = new StringBuilder();
jsonString.Append("["); while (dataReader.Read())
{
jsonString.Append("{");
for (int i = ; i < dataReader.FieldCount; i++)
{
Type type = dataReader.GetFieldType(i);
string strKey = dataReader.GetName(i);
string strValue = dataReader[i].ToString();
jsonString.Append("\"" + strKey + "\":");
strValue = StringFormat(strValue, type);
if (i < dataReader.FieldCount - )
{
jsonString.Append(strValue + ",");
}
else
{
jsonString.Append(strValue);
}
}
jsonString.Append("},");
}
if (!dataReader.IsClosed)
{
dataReader.Close();
}
jsonString.Remove(jsonString.Length - , );
jsonString.Append("]");
if (jsonString.Length == )
{
return "[]";
}
return jsonString.ToString();
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// DataSet转换为Json
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="dataSet">DataSet对象</param>
/// <returns>Json字符串</returns>
public static string ToJson(DataSet dataSet)
{
string jsonString = "{";
foreach (DataTable table in dataSet.Tables)
{
jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";
}
jsonString = jsonString.TrimEnd(',');
return jsonString + "}";
}
/// <summary>
/// DataTable转成Json
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="jsonName"></param>
/// <param name="dt"></param>
/// <returns></returns>
public static string ToJson(DataTable dt, string jsonName)
{
StringBuilder Json = new StringBuilder();
if (string.IsNullOrEmpty(jsonName))
jsonName = dt.TableName;
Json.Append("{\"" + jsonName + "\":[");
if (dt.Rows.Count > )
{
for (int i = ; i < dt.Rows.Count; i++)
{
Json.Append("{");
for (int j = ; j < dt.Columns.Count; j++)
{
Type type = dt.Rows[i][j].GetType();
Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j] is DBNull ? string.Empty : dt.Rows[i][j].ToString(), type));
if (j < dt.Columns.Count - )
{
Json.Append(",");
}
}
Json.Append("}");
if (i < dt.Rows.Count - )
{
Json.Append(",");
}
}
}
Json.Append("]}");
return Json.ToString();
}
/// <summary>
/// Datatable转换为Json
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="table">Datatable对象</param>
/// <returns>Json字符串</returns>
public static string ToJson(DataTable dt)
{
StringBuilder jsonString = new StringBuilder();
jsonString.Append("[");
DataRowCollection drc = dt.Rows;
for (int i = ; i < drc.Count; i++)
{
jsonString.Append("{");
for (int j = ; j < dt.Columns.Count; j++)
{
string strKey = dt.Columns[j].ColumnName;
string strValue = drc[i][j].ToString();
Type type = dt.Columns[j].DataType;
jsonString.Append("\"" + strKey + "\":");
strValue = StringFormat(strValue, type);
if (j < dt.Columns.Count - )
{
jsonString.Append(strValue + ",");
}
else
{
jsonString.Append(strValue);
}
}
jsonString.Append("},");
}
jsonString.Remove(jsonString.Length - , );
jsonString.Append("]");
if (jsonString.Length == )
{
return "[]";
}
return jsonString.ToString();
}
/// <summary>
/// 格式化字符型、日期型、布尔型
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="str"></param>
/// <param name="type"></param>
/// <returns></returns>
private static string StringFormat(string str, Type type)
{
if (type != typeof(string) && string.IsNullOrEmpty(str))
{
str = "\"" + str + "\"";
}
else if (type == typeof(string))
{
str = String2Json(str);
str = "\"" + str + "\"";
}
else if (type == typeof(DateTime))
{
str = "\"" + str + "\"";
}
else if (type == typeof(bool))
{
str = str.ToLower();
}
else if (type == typeof(byte[]))
{
str = "\"" + str + "\"";
}
else if (type == typeof(Guid))
{
str = "\"" + str + "\"";
}
return str;
}
/// <summary>
/// 过滤特殊字符
/// add yuangang by 2015-05-19
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string String2Json(String s)
{
StringBuilder sb = new StringBuilder();
for (int i = ; i < s.Length; i++)
{
char c = s.ToCharArray()[i];
switch (c)
{
case '\"':
sb.Append("\\\""); break;
case '\\':
sb.Append("\\\\"); break;
case '/':
sb.Append("\\/"); break;
case '\b':
sb.Append("\\b"); break;
case '\f':
sb.Append("\\f"); break;
case '\n':
sb.Append("\\n"); break;
case '\r':
sb.Append("\\r"); break;
case '\t':
sb.Append("\\t"); break;
case '\v':
sb.Append("\\v"); break;
case '\0':
sb.Append("\\0"); break;
default:
sb.Append(c); break;
}
}
return sb.ToString();
} public static string GetDataGridJsonByDataSet(DataSet ds, string totalProperty, string root)
{
return GetDataGridJsonByDataTable(ds.Tables[], totalProperty, root);
}
public static string GetDataGridJsonByDataTable(DataTable dt, string totalProperty, string root)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("({\"" + totalProperty + "\":\"" + dt.Rows.Count + "\",");
jsonBuilder.Append("\"");
jsonBuilder.Append(root);
jsonBuilder.Append("\":[");
for (int i = ; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = ; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("]");
jsonBuilder.Append("})");
return jsonBuilder.ToString();
} public static string GetTreeJsonByDataSet(DataSet ds)
{
return GetTreeJsonByDataTable(ds.Tables[]);
}
public static string GetTreeJsonByDataTable(DataTable dataTable)
{
DataTable dt = FormatDataTableForTree(dataTable);
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("[");
for (int i = ; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = ; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\'"); if (dt.Columns[j].ColumnName == "leaf")
{
string leafValue = dt.Rows[i][j].ToString(); if (!string.IsNullOrEmpty(leafValue))
{
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\':\'");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\',");
}
else
{
jsonBuilder.Remove(jsonBuilder.Length - , );
}
}
else if (dt.Columns[j].ColumnName == "customUrl")
{
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append(":\'");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\',");
}
else
{
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\':\'");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\',");
} }
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - , );
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
private static DataTable FormatDataTableForTree(DataTable dt)
{
DataTable dtTree = new DataTable();
dtTree.Columns.Add("id", typeof(string));
dtTree.Columns.Add("text", typeof(string));
dtTree.Columns.Add("leaf", typeof(string));
dtTree.Columns.Add("cls", typeof(string));
dtTree.Columns.Add("customUrl", typeof(string));
dtTree.AcceptChanges(); for (int i = ; i < dt.Rows.Count; i++)
{
DataRow drTree = dtTree.NewRow();
drTree["id"] = dt.Rows[i]["id"].ToString();
drTree["text"] = dt.Rows[i]["text"].ToString();
if (dt.Rows[i]["leaf"].ToString() == "Y")
{
drTree["leaf"] = "true";
drTree["cls"] = "file";
}
else
{
drTree["cls"] = "folder";
}
drTree["customUrl"] = dt.Rows[i]["customUrl"].ToString();
dtTree.Rows.Add(drTree);
}
return dtTree;
} }
/// <summary>
/// 动态JSON解析
/// add yuangang by 2015-05-19
/// </summary>
public class DynamicJsonObject : System.Dynamic.DynamicObject
{
private IDictionary<string, object> Dictionary { get; set; } public DynamicJsonObject(IDictionary<string, object> dictionary)
{
this.Dictionary = dictionary;
} public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)
{
result = this.Dictionary[binder.Name]; if (result is IDictionary<string, object>)
{
result = new DynamicJsonObject(result as IDictionary<string, object>);
}
else if (result is ArrayList && (result as ArrayList) is IDictionary<string, object>)
{
result = new List<DynamicJsonObject>((result as ArrayList).ToArray().Select(x => new DynamicJsonObject(x as IDictionary<string, object>)));
}
else if (result is ArrayList)
{
result = new List<object>((result as ArrayList).ToArray());
} return this.Dictionary.ContainsKey(binder.Name);
}
}
/// <summary>
/// 动态JSON转换
/// add yuangang by 2015-05-19
/// </summary>
public class DynamicJsonConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary"); if (type == typeof(object))
{
return new DynamicJsonObject(dictionary);
} return null;
} public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
} public override IEnumerable<Type> SupportedTypes
{
get { return new System.Collections.ObjectModel.ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(object) })); }
}
}
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、JsonHelper:json的辅助类

using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using System.Runtime.Serialization.Json;
using System.IO; namespace Common
{ /// <summary>
/// 提供了一个关于json的辅助类
/// </summary>
public class JsonHelper
{
#region Method
/// <summary>
/// 类对像转换成json格式
/// </summary>
/// <returns></returns>
public static string ToJson(object t)
{
return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include });
}
/// <summary>
/// 类对像转换成json格式
/// </summary>
/// <param name="t"></param>
/// <param name="HasNullIgnore">是否忽略NULL值</param>
/// <returns></returns>
public static string ToJson(object t, bool HasNullIgnore)
{
if (HasNullIgnore)
return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
else
return ToJson(t);
}
/// <summary>
/// json格式转换
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strJson"></param>
/// <returns></returns>
public static T FromJson<T>(string strJson) where T : class
{
if (!strJson.IsNullOrEmpty())
return JsonConvert.DeserializeObject<T>(strJson);
return null;
}
/// <summary>
/// 功能描述:将List转换为Json
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
public static string ListToJson(IList<object> a)
{ DataContractJsonSerializer json = new DataContractJsonSerializer(a.GetType());
string szJson = "";
//序列化
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, a);
szJson = Encoding.UTF8.GetString(stream.ToArray());
}
return szJson;
}
#endregion #region Property
/// <summary>
/// 数据状态
/// </summary>
public string Status { get; set; }
/// <summary>
/// 提示信息
/// </summary>
public string Msg { get; set; }
/// <summary>
/// 回传URL
/// </summary>
public string ReUrl { get; set; }
/// <summary>
/// 数据包
/// </summary>
public object Data { get; set; }
#endregion }
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、JsonSplit:判断字符串是否为Json

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Common
{
/// <summary>
/// 判断字符串是否为JSON
/// </summary>
public class JsonSplit
{
private static bool IsJsonStart(ref string json)
{
if (!string.IsNullOrEmpty(json))
{
json = json.Trim('\r', '\n', ' ');
if (json.Length > )
{
char s = json[];
char e = json[json.Length - ];
return (s == '{' && e == '}') || (s == '[' && e == ']');
}
}
return false;
}
public static bool IsJson(string json)
{
int errIndex;
return IsJson(json, out errIndex);
}
public static bool IsJson(string json, out int errIndex)
{
errIndex = ;
if (IsJsonStart(ref json))
{
CharState cs = new CharState();
char c;
for (int i = ; i < json.Length; i++)
{
c = json[i];
if (SetCharState(c, ref cs) && cs.childrenStart)//设置关键符号状态。
{
string item = json.Substring(i);
int err;
int length = GetValueLength(item, true, out err);
cs.childrenStart = false;
if (err > )
{
errIndex = i + err;
return false;
}
i = i + length - ;
}
if (cs.isError)
{
errIndex = i;
return false;
}
} return !cs.arrayStart && !cs.jsonStart;
}
return false;
} /// <summary>
/// 获取值的长度(当Json值嵌套以"{"或"["开头时)
/// </summary>
private static int GetValueLength(string json, bool breakOnErr, out int errIndex)
{
errIndex = ;
int len = ;
if (!string.IsNullOrEmpty(json))
{
CharState cs = new CharState();
char c;
for (int i = ; i < json.Length; i++)
{
c = json[i];
if (!SetCharState(c, ref cs))//设置关键符号状态。
{
if (!cs.jsonStart && !cs.arrayStart)//json结束,又不是数组,则退出。
{
break;
}
}
else if (cs.childrenStart)//正常字符,值状态下。
{
int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//递归子值,返回一个长度。。。
cs.childrenStart = false;
cs.valueStart = ;
//cs.state = 0;
i = i + length - ;
}
if (breakOnErr && cs.isError)
{
errIndex = i;
return i;
}
if (!cs.jsonStart && !cs.arrayStart)//记录当前结束位置。
{
len = i + ;//长度比索引+1
break;
}
}
}
return len;
}
/// <summary>
/// 字符状态
/// </summary>
private class CharState
{
internal bool jsonStart = false;//以 "{"开始了...
internal bool setDicValue = false;// 可以设置字典值了。
internal bool escapeChar = false;//以"\"转义符号开始了
/// <summary>
/// 数组开始【仅第一开头才算】,值嵌套的以【childrenStart】来标识。
/// </summary>
internal bool arrayStart = false;//以"[" 符号开始了
internal bool childrenStart = false;//子级嵌套开始了。
/// <summary>
/// 【0 初始状态,或 遇到“,”逗号】;【1 遇到“:”冒号】
/// </summary>
internal int state = ; /// <summary>
/// 【-1 取值结束】【0 未开始】【1 无引号开始】【2 单引号开始】【3 双引号开始】
/// </summary>
internal int keyStart = ;
/// <summary>
/// 【-1 取值结束】【0 未开始】【1 无引号开始】【2 单引号开始】【3 双引号开始】
/// </summary>
internal int valueStart = ;
internal bool isError = false;//是否语法错误。 internal void CheckIsError(char c)//只当成一级处理(因为GetLength会递归到每一个子项处理)
{
if (keyStart > || valueStart > )
{
return;
}
//示例 ["aa",{"bbbb":123,"fff","ddd"}]
switch (c)
{
case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
isError = jsonStart && state == ;//重复开始错误 同时不是值处理。
break;
case '}':
isError = !jsonStart || (keyStart != && state == );//重复结束错误 或者 提前结束{"aa"}。正常的有{}
break;
case '[':
isError = arrayStart && state == ;//重复开始错误
break;
case ']':
isError = !arrayStart || jsonStart;//重复开始错误 或者 Json 未结束
break;
case '"':
case '\'':
isError = !(jsonStart || arrayStart); //json 或数组开始。
if (!isError)
{
//重复开始 [""",{"" "}]
isError = (state == && keyStart == -) || (state == && valueStart == -);
}
if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]
{
isError = true;
}
break;
case ':':
isError = !jsonStart || state == ;//重复出现。
break;
case ',':
isError = !(jsonStart || arrayStart); //json 或数组开始。
if (!isError)
{
if (jsonStart)
{
isError = state == || (state == && valueStart > );//重复出现。
}
else if (arrayStart)//["aa,] [,] [{},{}]
{
isError = keyStart == && !setDicValue;
}
}
break;
case ' ':
case '\r':
case '\n'://[ "a",\r\n{} ]
case '\0':
case '\t':
break;
default: //值开头。。
isError = (!jsonStart && !arrayStart) || (state == && keyStart == -) || (valueStart == - && state == );//
break;
}
//if (isError)
//{ //}
}
}
/// <summary>
/// 设置字符状态(返回true则为关键词,返回false则当为普通字符处理)
/// </summary>
private static bool SetCharState(char c, ref CharState cs)
{
cs.CheckIsError(c);
switch (c)
{
case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
#region 大括号
if (cs.keyStart <= && cs.valueStart <= )
{
cs.keyStart = ;
cs.valueStart = ;
if (cs.jsonStart && cs.state == )
{
cs.childrenStart = true;
}
else
{
cs.state = ;
}
cs.jsonStart = true;//开始。
return true;
}
#endregion
break;
case '}':
#region 大括号结束
if (cs.keyStart <= && cs.valueStart < && cs.jsonStart)
{
cs.jsonStart = false;//正常结束。
cs.state = ;
cs.keyStart = ;
cs.valueStart = ;
cs.setDicValue = true;
return true;
}
// cs.isError = !cs.jsonStart && cs.state == 0;
#endregion
break;
case '[':
#region 中括号开始
if (!cs.jsonStart)
{
cs.arrayStart = true;
return true;
}
else if (cs.jsonStart && cs.state == )
{
cs.childrenStart = true;
return true;
}
#endregion
break;
case ']':
#region 中括号结束
if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= && cs.valueStart <= )//[{},333]//这样结束。
{
cs.keyStart = ;
cs.valueStart = ;
cs.arrayStart = false;
return true;
}
#endregion
break;
case '"':
case '\'':
#region 引号
if (cs.jsonStart || cs.arrayStart)
{
if (cs.state == )//key阶段,有可能是数组["aa",{}]
{
if (cs.keyStart <= )
{
cs.keyStart = (c == '"' ? : );
return true;
}
else if ((cs.keyStart == && c == '\'') || (cs.keyStart == && c == '"'))
{
if (!cs.escapeChar)
{
cs.keyStart = -;
return true;
}
else
{
cs.escapeChar = false;
}
}
}
else if (cs.state == && cs.jsonStart)//值阶段必须是Json开始了。
{
if (cs.valueStart <= )
{
cs.valueStart = (c == '"' ? : );
return true;
}
else if ((cs.valueStart == && c == '\'') || (cs.valueStart == && c == '"'))
{
if (!cs.escapeChar)
{
cs.valueStart = -;
return true;
}
else
{
cs.escapeChar = false;
}
} }
}
#endregion
break;
case ':':
#region 冒号
if (cs.jsonStart && cs.keyStart < && cs.valueStart < && cs.state == )
{
if (cs.keyStart == )
{
cs.keyStart = -;
}
cs.state = ;
return true;
}
// cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1);
#endregion
break;
case ',':
#region 逗号 //["aa",{aa:12,}] if (cs.jsonStart)
{
if (cs.keyStart < && cs.valueStart < && cs.state == )
{
cs.state = ;
cs.keyStart = ;
cs.valueStart = ;
//if (cs.valueStart == 1)
//{
// cs.valueStart = 0;
//}
cs.setDicValue = true;
return true;
}
}
else if (cs.arrayStart && cs.keyStart <= )
{
cs.keyStart = ;
//if (cs.keyStart == 1)
//{
// cs.keyStart = -1;
//}
return true;
}
#endregion
break;
case ' ':
case '\r':
case '\n'://[ "a",\r\n{} ]
case '\0':
case '\t':
if (cs.keyStart <= && cs.valueStart <= ) //cs.jsonStart &&
{
return true;//跳过空格。
}
break;
default: //值开头。。
if (c == '\\') //转义符号
{
if (cs.escapeChar)
{
cs.escapeChar = false;
}
else
{
cs.escapeChar = true;
return true;
}
}
else
{
cs.escapeChar = false;
}
if (cs.jsonStart || cs.arrayStart) // Json 或数组开始了。
{
if (cs.keyStart <= && cs.state == )
{
cs.keyStart = ;//无引号的
}
else if (cs.valueStart <= && cs.state == && cs.jsonStart)//只有Json开始才有值。
{
cs.valueStart = ;//无引号的
}
}
break;
}
return false;
}
}
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

四、AjaxResult:前台Ajax请求的统一返回结果类

using System.Web.Script.Serialization;
namespace Common
{
/// <summary>
/// 前台Ajax请求的统一返回结果类
/// </summary>
public class AjaxResult
{
private AjaxResult()
{
} private bool iserror = false; /// <summary>
/// 是否产生错误
/// </summary>
public bool IsError { get { return iserror; } } /// <summary>
/// 错误信息,或者成功信息
/// </summary>
public string Message { get; set; } /// <summary>
/// 成功可能时返回的数据
/// </summary>
public object Data { get; set; } #region Error
public static AjaxResult Error()
{
return new AjaxResult()
{
iserror = true
};
}
public static AjaxResult Error(string message)
{
return new AjaxResult()
{
iserror = true,
Message = message
};
}
#endregion #region Success
public static AjaxResult Success()
{
return new AjaxResult()
{
iserror = false
};
}
public static AjaxResult Success(string message)
{
return new AjaxResult()
{
iserror = false,
Message = message
};
}
public static AjaxResult Success(object data)
{
return new AjaxResult()
{
iserror = false,
Data = data
};
}
public static AjaxResult Success(object data, string message)
{
return new AjaxResult()
{
iserror = false,
Data = data,
Message = message
};
}
#endregion /// <summary>
/// 序列化
/// </summary>
/// <returns></returns>
public override string ToString()
{
return new JavaScriptSerializer().Serialize(this);
}
}
}

常用的一些Json操作类,留备。会继续为大家分享一些 常用的 公共帮助类。

原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com

【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用的更多相关文章

  1. 【C#公共帮助类】JsonHelper 操作帮助类

    四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换js ...

  2. [功能帮助类] JsHelper--Javascript操作帮助类 (转载)

    点击下载 JsHelper.rar 这个类是关于加密,解密的操作,文件的一些高级操作1.Javascript弹出信息,并跳转指定页面. 2.Javascript弹出信息,并返回历史页面3.Javasc ...

  3. C# File类的操作

    原文:C# File类的操作 File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件.File类方法的参 ...

  4. c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html MFC图像处理CImage类常用操作 CImage类头文件为#inclu ...

  5. 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作

    关于本文档的说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集 ...

  6. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

  7. C#工具类:Json操作帮助类(转载)

    原文转载自C#工具类:Json操作帮助类_IT技术小趣屋. Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来 ...

  8. 【转载】C#工具类:Json操作帮助类

    Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...

  9. Redis 操作帮助类

    首先从Nuget中添加StackExchange.Redis包 1.Redis连接对象管理帮助类 using Mvc.Base; using Mvc.Base.Log; using StackExch ...

随机推荐

  1. RBAC模型速记

    RBAC Model core concept: user,role,permission,operation,resource user has many roles, assign role to ...

  2. 关于分工的思考 (Thoughts on Division of Labor)

    Did you ever have the feeling that adding people doesn't help in software development? Did you ever ...

  3. Module Zero安装

    返回<Module Zero学习目录> 使用模板创建(自动方式) 手动安装 核心(领域)层 基础设施层 展示层 这里需要抱歉的是,这里使用的博客园的Markdown语法,代码显示不是很好看 ...

  4. Tomcat7基于Redis的Session共享实战二

    目前,为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无 ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (15) -----第三章 查询之与列表值比较和过滤关联实体

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-8与列表值比较 问题 你想查询一个实体,条件是给定的列表中包含指定属性的值. 解 ...

  6. Python3 的json 和 PHP的json

    Python3操作json的标准api库参考:https://docs.python.org/3/library/json.html#module-json >>> aa = ['/ ...

  7. JQuery学习思维导图版

    常用UI资源 参考资料:Jquery教程 dataTables:教程  中文教程 Wizard:教程 Jquery UI demos:教程 selectmenu:教程 jquery-slider:教程 ...

  8. Uiautomator 2.0之UiDevice新增API学习小记

    1. InstrumentationRegistry类 1.1. 类说明: 一个暴露的注册实例,持有instrumentation运行的进程和参数,还提供了一种简便的方法调用instrumentati ...

  9. Design6:选择合适的数据类型

    数据库使用Table来存储海量的数据,细分Table结构,数据最终存储在Table Column中,因此,在设计Table Schema时,必须慎重选择Table Column的Data Type,数 ...

  10. SSISDB6:Operation

    SSISDB使用Operation表示对SSIS Project所做的任何操作,在执行一次Operation时,SSISDB会记录Operation的Message,当触发Event时,会记录Even ...