四个主要操作类: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);}}
}

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

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

转载于:https://www.cnblogs.com/yuangang/p/5468777.html

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

  1. 【PPT】《挑战用chatgpt完成流水线操作的ppt,再也不用担心每周肝组会报告ppt了#人工智能 #chatgpt应用领域 快学起来!!!》- 知识点目录

    <挑战用chatgpt完成流水线操作的ppt,再也不用担心每周肝组会报告ppt了#人工智能 #chatgpt应用领域 快学起来!!!> 1. PPT文字模板说明(Prompt) 我的名字叫 ...

  2. 我的硬盘居然被win10安装工具_最完整的win10操作系统安装教程,再也不用第三方工具了...

    电脑操作系统你真的以为很复杂吗?不,并不复杂.之所以在谈及电脑操作系统的安装的时候,大家都会认为它很复杂,有多半原因是因为都是道听途说,自己并没有亲自动手安装过.看到身边的很多人,都是花费一半百元找电 ...

  3. django-shell操作模型类

    操作django的shell >启动shell python manage.py shell >使用 随堂 查询数据 查询得到对象 查询操作,主要利用模型类来操作 模型类.object.g ...

  4. 【无标题】c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html 我看了一下发现关于c++下的CImage图像处理类 的图像处理相关的介绍 ...

  5. C++派生类对象和基类对象赋值

    在C++中,我们允许 将派生类对象赋给基类对象.(不允许将基类对象赋给派生类对象) 只会将基类对象成员赋值 用基类指针指向派生类对象.(不允许用派生类指针指向基类对象) 基类指针只能操作基类中的成员 ...

  6. oracleHelper 操作帮助类

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

  7. 第88天:HTML5中使用classList操作css类

    在HTML5 API里,页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增.删除.修改节点上的CSS类.使用classList,程序员还可以用它来判断某个节点是否被赋 ...

  8. Java中Properties类的操作

    Java中Properties类的操作 ============================================= com.gordon.constant Constant.java: ...

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

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

最新文章

  1. 图解四种启动模式 及 实际应用场景解说
  2. SQL Server 2008还原数据库时出现“备份集中的数据库备份与现有的数据库不同”的解决方法
  3. Go 语言编程 — 高级数据类型 — Map 集合
  4. 全球与中国聚硫聚合物市场运行规模分析及前景趋势预测报2021年版
  5. 解决VERSION 1.7 OF THE JVM IS NOT SUITABLE FOR THIS PRODUCT.
  6. 预测未来 盘点大数据分析领域五大趋势
  7. 【Round #36 (Div. 2 only) B】Safe Spots
  8. java 面相,java学习17-面相对象(多态)
  9. 如何在传统 ASP 和 ASP.NET 之间共享会话状态
  10. 三菱plc pwm指令_西门子PLC常见的20个问题,你碰到过几个?
  11. 12 浏览器对象模型BOM
  12. python输出数字三角形_python 数字三角形
  13. 【图解CDD】利用CANdelaStudio编辑诊断描述CDD文件带你入门到精通
  14. 关于SearchView的一些小细节
  15. Flask中'endpoint'(端点)的理解
  16. Macbook电池出现“建议维修”的解决办法
  17. 引起C运行时错误R6034的原因和解决方法
  18. 新站之网站优化方案[优化]
  19. 谷歌浏览器部分网站不能保存密码
  20. 外泌体相关研究最新进展(2022年6月)

热门文章

  1. 经典算法题每日演练——第九题 优先队列
  2. 实验讲解OSPF网络类型
  3. java 查询启动时间_java获取系统开机时间
  4. REDIS故障排查工具
  5. 为何excel中数据无法计算机,excel表格内数据为何无法计算机-为什么EXCEL单元格内的数字不能运算...
  6. 关系型数据库(RDBMS)优势
  7. MySQL条件运算符的使用
  8. SpringSecurity案例之认证服务搭建
  9. AQS.acquireQueued
  10. 商品评价 - 实现分页