1. 程式人生 > >【C#公共幫助類】JsonHelper 操作幫助類, 以後再也不用滿地找Json了,拿來直接用

【C#公共幫助類】JsonHelper 操作幫助類, 以後再也不用滿地找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) })); } } } }

相關推薦

C#公共幫助JsonHelper 操作幫助 以後再也不用滿地Json接用

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Linq; using System.Web.Script.Serialization; usi

Swift生成二維碼圖片(封裝成工具接用

封裝了一個生成二維碼的工具類,使用的時候直接傳參UIImageView和url就可直接生成二維碼後設置上去,簡單方便 ! class QRCodeUtil { static func setQRCodeToImageView(_ imageView: UIImag

C#公共幫助 WebHelper幫助

1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.U

C#公共幫助給大家分享一些加密演算法 (DES、HashCode、RSA、AES等)

AES       高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。AES先進加密演算法是一向被認為牢不可破的加密演算法,

C#公共幫助 Log4net 幫助

1 using log4net.Core; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Reflection; 6 using System

C#公共幫助分頁邏輯處理

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Common 7 { 8 ///

C#公共幫助列舉獨特

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ComponentModel; 6 7 nam

C#公共幫助 ToolsHelper幫助

1 using System; 2 using System.Text; 3 using System.Text.RegularExpressions; 4 using System.Collections.Generic; 5 using System.Reflection;

C++/數據結構單鏈表的基本操作

clear default als troy pub 插入 else fonts pac #pragma once #ifndef _CLIST_H_ #define _CLIST_H_ #include <iostream> #include <

C#復習總結匿名型由來

數據類型 over 無效 訪問性 屬性。 知乎 私有 不能 默認構造函數 1 屬性 這得先從屬性開始說,為什麽外部代碼訪問對象內部的數據用屬性而不是直接訪問呢,這樣豈不是更方便一些,但是事實證明直接訪問是不安全的。那麽,Anders Hejlsberg(安德斯&mid

C#學習之路001.基本操作

arp main cti 字符 thread 程序 AI 報錯 float 001【HelloWorld】分析代碼塊 //這裏是註釋 下面是引入命名空間 using System; using System.Collections.Generic; using Syst

C#多執行緒1.Thread的使用及注意要點

Thread隨便講講   因為在C#中,Thread類在我們的新業務上並不常用了(因為建立一個新執行緒要比直接從執行緒池拿執行緒更加耗費資源),並且在.NET4.0後新增了Task類即Async與await關鍵字,使得我們基本不再用Thread了,不過在學習多執行緒前,有必要先了解下Thread類,這裡就先隨

HTTP模擬工具C#/Winform源碼Json綁定TreeView控件、使用MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool這幾個主要開源框架

type form num -m 請求 resource dap bool dev HTTP模擬工具 開發語言:C#/Winform開發工具:Visual Studio 2017數據庫: SQLite使用框架:界面-MetroModernUI

C++探索之旅第二部分第一課:面向對象初探string的驚天內幕

信息技術 false cli 方法 復雜 weixin include 命令 就是 內容簡單介紹 1、第二部分第一課:面向對象初探。string的驚天內幕 2

c++對properties配置文件操作工具

c++ properties code源代碼GitHub路徑:源代碼地址下載 最近要使用c++對windows api相關接口的封裝,有2個接口要求讀寫properties文件。原以為網上應該有一大堆資料的,結果拜BAI度的大恩大德,一點相關的資料都沒有。那就只能自己動手豐衣足食。再次感謝十分強大只是找不到相

Java知識點專項練習之 數據型兩大

char ger ava 練習 類型 包裝類 java 進行 cte Java的數據類型分為兩大類:基本類型和引用類型; 基本類型只能保存一些常量數據,引用類型除了可以保存數據,還能提供操作這些數據的功能; 為了操作基本類型的數據,java也對它們進行了封裝, 得到八個類,

C#文件夾權限操作工具

輔助類 ace ont tex bject per right adding IT using System; using System.Collections.Generic; using System.IO; using System.Linq; using

將文件拖曳到窗體上 並獲取其完整路徑 C++ Builder下實現

pat ext stc fff led CP tle 聲明 net 1. 在窗體的頭文件.h裏聲明處理函數和消息映射, 如: [cpp] view plain copy class TForm1 : public TForm {

C#復習總結細說委托

protected 希望 百度百科 內存 sting lin baidu 調用約定 multicast 1 前言 前幾天看到博客園一個前輩寫了一篇文章用“五分鐘重溫委托,匿名方法,Lambda,泛型委托,表達式樹”,文章寫的非常好,推薦閱讀一下,正

C#復習總結細說匿名方法

target [] targe left 沒有 如果 連接 program ont 1 前言 本系列會將【委托】 【匿名方法】【Lambda表達式】 【泛型委托】 【表達式樹】 【事件】等基礎知識總結一下。(本人小白一枚,有錯誤的地方希望大佬指正) 系類1:細說委托