四个主要操作类: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 });elsereturn 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;//长度比索引+1break;}}}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;}#endregionbreak;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;#endregionbreak;case '[':#region 中括号开始if (!cs.jsonStart){cs.arrayStart = true;return true;}else if (cs.jsonStart && cs.state == 1){cs.childrenStart = true;return true;}#endregionbreak;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;}#endregionbreak;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;}}}}#endregionbreak;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);#endregionbreak;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;}#endregionbreak;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 Errorpublic static AjaxResult Error(){return new AjaxResult(){iserror = true};}public static AjaxResult Error(string message){return new AjaxResult(){iserror = true,Message = message};}#endregion#region Successpublic 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);}}
}

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

转载于:https://www.cnblogs.com/renfushuai/p/5482629.html

JsonHelper 操作帮助类相关推荐

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

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

  2. oracleHelper 操作帮助类

    1 using System; 2 using System.Configuration; 3 using System.Data; 4 using System.Collections; 5 usi ...

  3. C#(asp.net)对字符串的操作公共类(StringUtil.cs)

    C#(asp.net)对字符串的操作公共类(StringUtil.cs) 我们在做项目时会需要对字符串进行特殊处理,以下提供C#(asp.net)对字符串的操作公共类,直接复制以下代码到新建cs文件S ...

  4. 【Android 逆向】Android 逆向通用工具开发 ( 静态库项目中的网络操作核心类 CNetwork 分析 )

    文章目录 一.adabingo 静态库项目中的网络操作核心类 CNetwork 分析 一.adabingo 静态库项目中的网络操作核心类 CNetwork 分析 CNetwork 相关方法分析 : 等 ...

  5. 线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)

    生产者与消费者模式 一个生产者与一个消费者 题目:现在有两个线程,可以操作初始值为0的一个变量,实现一个线程对该变量加1,另一个线程对该变量减1,这两个线程的操作加一.减一交替,进行10轮,变量的初始 ...

  6. php高性能sqllite,简洁的PHP操作SQLite类

    原标题:简洁的PHP操作SQLite类 如果有文章推荐,或者你们要看什么的技术文章,请在留言处留言,感谢支持 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式 ...

  7. 封装SQLDMO操作的类

    封装SQLDMO操作的类,能完成常用的SQL Server 2000管理工作. 使用前请添加 "Microsoft SQLDMO Object Library" COM 引用. 有 ...

  8. php文本教学,php中文本操作的类

    给大家一个简单的文本操作的类. 我以前写的,不过一直都没机会用了,文本不如数据库.数据是以行保存的,以\n结尾,注意你输入的数据必须以"\n"结尾的,这是几个最基本的类成员,文本的 ...

  9. PHP操作excel类 PHPExcel

    PHP操作excel类 PHPExcel http://www.cr173.com/soft/40741.html   我的微云:http://share.weiyun.com/2db79f1438f ...

  10. php excel 设置常规_php实现的操作excel类详解

    本文实例讲述了php实现的操作excel类.分享给大家供大家参考,具体如下: class Excel { static $instance=null; private $excel=null; pri ...

最新文章

  1. php判断访客语言,php实现获取及设置用户访问页面语言类
  2. Using Preferences(Beginning Android)
  3. 【知识便利贴】ImageNet得的比Best Paper还牛的Longuet-Higgins奖是什么?
  4. Spring原始注解开发-02
  5. 中国癌症大数据出来了!每年126万例癌症死亡本可避免
  6. OpenCV修养(一)——引入
  7. COM域名难逃实名监管 CN域名简化流程抢用户
  8. 周志华任大会首个华人程序主席!
  9. 【Java】Java中的在Linux和Mac以及Windows上使用File.separator的坑
  10. WiMAX版图不止3G
  11. 网络靶场攻防综合实验
  12. 2021鹏业安装算量软件常见问题整理(五)
  13. Deep Learning 学习笔记
  14. 大众点评字体_大众点评字体加密
  15. html 各浏览器兼容性
  16. com.alibaba.fastjson.JSONException: create instanc
  17. python虚拟环境创建失败_python 创建虚拟环境时报错OSError, setuptools下载失败
  18. discuz 如何去掉:导读-最新发表
  19. 像李欣频一样思考人生~
  20. 广告投放方式:CPC、CPM、CPA、CPS、CPT

热门文章

  1. 4.2 tensorflow2实现多总体位置参数趋势性检验——python实战
  2. 简单易懂——Dijkstra算法讲解
  3. 初识数据库——Mysql入门
  4. 矩阵论:向量求导/微分和矩阵微分
  5. C++基础:第四章 数组、vector和字符串
  6. python中按位运算符_Python中的按位运算符详解
  7. Futter基础第20篇: 实现轮播图 flutter_swiper
  8. Futter基础第13篇: 实现Drawer侧边栏、以及侧边栏内容布局
  9. Android 自定义View(三)
  10. 研究生小菜简谈“如何做研究”