你的位置:首页 > ASP.net教程

[ASP.net教程]【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用


 四个主要操作类: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(1970, 1, 1);          dt = dt.AddMilliseconds(long.Parse(match.Groups[1].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 = 0; 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 - 1)            {              jsonString.Append(strValue + ",");            }            else            {              jsonString.Append(strValue);            }          }          jsonString.Append("},");        }        if (!dataReader.IsClosed)        {          dataReader.Close();        }        jsonString.Remove(jsonString.Length - 1, 1);        jsonString.Append("]");        if (jsonString.Length == 1)        {          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 > 0)      {        for (int i = 0; i < dt.Rows.Count; i++)        {          Json.Append("{");          for (int j = 0; 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 - 1)            {              Json.Append(",");            }          }          Json.Append("}");          if (i < dt.Rows.Count - 1)          {            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 = 0; i < drc.Count; i++)      {        jsonString.Append("{");        for (int j = 0; 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 - 1)          {            jsonString.Append(strValue + ",");          }          else          {            jsonString.Append(strValue);          }        }        jsonString.Append("},");      }      jsonString.Remove(jsonString.Length - 1, 1);      jsonString.Append("]");      if (jsonString.Length == 1)      {        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 = 0; 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[0], 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 = 0; i < dt.Rows.Count; i++)      {        jsonBuilder.Append("{");        for (int j = 0; 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 - 1, 1);        jsonBuilder.Append("},");      }      jsonBuilder.Remove(jsonBuilder.Length - 1, 1);      jsonBuilder.Append("]");      jsonBuilder.Append("})");      return jsonBuilder.ToString();    }    public static string GetTreeJsonByDataSet(DataSet ds)    {      return GetTreeJsonByDataTable(ds.Tables[0]);    }    public static string GetTreeJsonByDataTable(DataTable dataTable)    {      DataTable dt = FormatDataTableForTree(dataTable);      StringBuilder jsonBuilder = new StringBuilder();      jsonBuilder.Append("[");      for (int i = 0; i < dt.Rows.Count; i++)      {        jsonBuilder.Append("{");        for (int j = 0; 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 - 1, 1);            }          }          else if (dt.Columns[j].ColumnName == "customUrl")          {            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);            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 - 1, 1);        jsonBuilder.Append("},");      }      jsonBuilder.Remove(jsonBuilder.Length - 1, 1);      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 = 0; 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 > 1)        {          char s = json[0];          char e = json[json.Length - 1];          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 = 0;      if (IsJsonStart(ref json))      {        CharState cs = new CharState();        char c;        for (int i = 0; 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 > 0)            {              errIndex = i + err;              return false;            }            i = i + length - 1;          }          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 = 0;      int len = 0;      if (!string.IsNullOrEmpty(json))      {        CharState cs = new CharState();        char c;        for (int i = 0; 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 = 0;            //cs.state = 0;            i = i + length - 1;          }          if (breakOnErr && cs.isError)          {            errIndex = i;            return i;          }          if (!cs.jsonStart && !cs.arrayStart)//记录当前结束位置。          {            len = i + 1;//长度比索引+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 = 0;      /// <summary>      /// 【-1 取值结束】【0 未开始】【1 无引号开始】【2 单引号开始】【3 双引号开始】      /// </summary>      internal int keyStart = 0;      /// <summary>      /// 【-1 取值结束】【0 未开始】【1 无引号开始】【2 单引号开始】【3 双引号开始】      /// </summary>      internal int valueStart = 0;      internal bool isError = false;//是否语法错误。      internal void CheckIsError(char c)//只当成一级处理(因为GetLength会递归到每一个子项处理)      {        if (keyStart > 1 || valueStart > 1)        {          return;        }        //示例 ["aa",{"bbbb":123,"fff","ddd"}]         switch (c)        {          case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]            isError = jsonStart && state == 0;//重复开始错误 同时不是值处理。            break;          case '}':            isError = !jsonStart || (keyStart != 0 && state == 0);//重复结束错误 或者 提前结束{"aa"}。正常的有{}            break;          case '[':            isError = arrayStart && state == 0;//重复开始错误            break;          case ']':            isError = !arrayStart || jsonStart;//重复开始错误 或者 Json 未结束            break;          case '"':          case '\'':            isError = !(jsonStart || arrayStart); //json 或数组开始。            if (!isError)            {              //重复开始 [""",{"" "}]              isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1);            }            if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]            {              isError = true;            }            break;          case ':':            isError = !jsonStart || state == 1;//重复出现。            break;          case ',':            isError = !(jsonStart || arrayStart); //json 或数组开始。            if (!isError)            {              if (jsonStart)              {                isError = state == 0 || (state == 1 && valueStart > 1);//重复出现。              }              else if (arrayStart)//["aa,] [,] [{},{}]              {                isError = keyStart == 0 && !setDicValue;              }            }            break;          case ' ':          case '\r':          case '\n'://[ "a",\r\n{} ]          case '\0':          case '\t':            break;          default: //值开头。。            isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);//            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 <= 0 && cs.valueStart <= 0)          {            cs.keyStart = 0;            cs.valueStart = 0;            if (cs.jsonStart && cs.state == 1)            {              cs.childrenStart = true;            }            else            {              cs.state = 0;            }            cs.jsonStart = true;//开始。            return true;          }          #endregion          break;        case '}':          #region 大括号结束          if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)          {            cs.jsonStart = false;//正常结束。            cs.state = 0;            cs.keyStart = 0;            cs.valueStart = 0;            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 == 1)          {            cs.childrenStart = true;            return true;          }          #endregion          break;        case ']':          #region 中括号结束          if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//这样结束。          {            cs.keyStart = 0;            cs.valueStart = 0;            cs.arrayStart = false;            return true;          }          #endregion          break;        case '"':        case '\'':          #region 引号          if (cs.jsonStart || cs.arrayStart)          {            if (cs.state == 0)//key阶段,有可能是数组["aa",{}]            {              if (cs.keyStart <= 0)              {                cs.keyStart = (c == '"' ? 3 : 2);                return true;              }              else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"'))              {                if (!cs.escapeChar)                {                  cs.keyStart = -1;                  return true;                }                else                {                  cs.escapeChar = false;                }              }            }            else if (cs.state == 1 && cs.jsonStart)//值阶段必须是Json开始了。            {              if (cs.valueStart <= 0)              {                cs.valueStart = (c == '"' ? 3 : 2);                return true;              }              else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"'))              {                if (!cs.escapeChar)                {                  cs.valueStart = -1;                  return true;                }                else                {                  cs.escapeChar = false;                }              }            }          }          #endregion          break;        case ':':          #region 冒号          if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0)          {            if (cs.keyStart == 1)            {              cs.keyStart = -1;            }            cs.state = 1;            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 < 2 && cs.valueStart < 2 && cs.state == 1)            {              cs.state = 0;              cs.keyStart = 0;              cs.valueStart = 0;              //if (cs.valueStart == 1)              //{              //  cs.valueStart = 0;              //}              cs.setDicValue = true;              return true;            }          }          else if (cs.arrayStart && cs.keyStart <= 2)          {            cs.keyStart = 0;            //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 <= 0 && cs.valueStart <= 0) //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 <= 0 && cs.state == 0)            {              cs.keyStart = 1;//无引号的            }            else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//只有Json开始才有值。            {              cs.valueStart = 1;//无引号的            }          }          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