C#通用JSON操作类

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using System;  
  2. using System.Data;  
  3. using System.Text;  
  4. using System.Collections.Generic;  
  5. using System.Reflection;  
  6. using System.Data.Common;  
  7. using System.Collections;  
  8. using System.IO;  
  9. using System.Text.RegularExpressions;  
  10. using System.Runtime.Serialization.Json;  
  11.   
  12.   
  13. namespace ZZUdp.Tool  
  14. {  
  15.     public static class JsonHepler  
  16.     {  
  17.         /// <summary>  
  18.         /// List转成json   
  19.         /// </summary>  
  20.         /// <typeparam name="T"></typeparam>  
  21.         /// <param name="jsonName"></param>  
  22.         /// <param name="list"></param>  
  23.         /// <returns></returns>  
  24.         public static string ListToJson<T>(IList<T> list, string jsonName)  
  25.         {  
  26.             StringBuilder Json = new StringBuilder();  
  27.             if (string.IsNullOrEmpty(jsonName))  
  28.                 jsonName = list[0].GetType().Name;  
  29.             Json.Append("{\"" + jsonName + "\":[");  
  30.             if (list.Count > 0)  
  31.             {  
  32.                 for (int i = 0; i < list.Count; i++)  
  33.                 {  
  34.                     T obj = Activator.CreateInstance<T>();  
  35.                     PropertyInfo[] pi = obj.GetType().GetProperties();  
  36.                     Json.Append("{");  
  37.                     for (int j = 0; j < pi.Length; j++)  
  38.                     {  
  39.                         Type type;  
  40.                         object o = pi[j].GetValue(list[i], null);  
  41.                         string v = string.Empty;  
  42.                         if (o != null)  
  43.                         {  
  44.                             type = o.GetType();  
  45.                             v = o.ToString();  
  46.                         }  
  47.                         else  
  48.                         {  
  49.                             type = typeof(string);  
  50.                         }  
  51.   
  52.                         Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(v, type));  
  53.   
  54.                         if (j < pi.Length - 1)  
  55.                         {  
  56.                             Json.Append(",");  
  57.                         }  
  58.                     }  
  59.                     Json.Append("}");  
  60.                     if (i < list.Count - 1)  
  61.                     {  
  62.                         Json.Append(",");  
  63.                     }  
  64.                 }  
  65.             }  
  66.             Json.Append("]}");  
  67.             return Json.ToString();  
  68.         }  
  69.   
  70.         /// <summary>  
  71.         /// 序列化集合对象  
  72.         /// </summary>  
  73.         public static string JsonSerializerByArrayData<T>(T[] tArray)  
  74.         {  
  75.             DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[]));  
  76.             MemoryStream ms = new MemoryStream();  
  77.             ser.WriteObject(ms, tArray);  
  78.             string jsonString = Encoding.UTF8.GetString(ms.ToArray());  
  79.             ms.Close();  
  80.             string p = @"\\/Date(\d+)\+\d+\\/";  
  81.             MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  
  82.             Regex reg = new Regex(p);  
  83.             jsonString = reg.Replace(jsonString, matchEvaluator);  
  84.             return jsonString;  
  85.         }  
  86.   
  87.         /// <summary>  
  88.         /// 序列化单个对象  
  89.         /// </summary>  
  90.         public static string JsonSerializerBySingleData<T>(T t)  
  91.         {  
  92.             DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
  93.             MemoryStream ms = new MemoryStream();  
  94.             ser.WriteObject(ms, t);  
  95.             string jsonString = Encoding.UTF8.GetString(ms.ToArray());  
  96.             ms.Close();  
  97.             string p = @"\\/Date(\d+)\+\d+\\/";  
  98.             MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  
  99.             Regex reg = new Regex(p);  
  100.             jsonString = reg.Replace(jsonString, matchEvaluator);  
  101.             return jsonString;  
  102.         }  
  103.   
  104.         /// <summary>   
  105.         /// 反序列化单个对象  
  106.         /// </summary>   
  107.         public static T JsonDeserializeBySingleData<T>(string jsonString)  
  108.         {  
  109.             //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式    
  110.             string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";  
  111.             MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);  
  112.             Regex reg = new Regex(p);  
  113.             jsonString = reg.Replace(jsonString, matchEvaluator);  
  114.             DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
  115.             MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  
  116.             T obj = (T)ser.ReadObject(ms);  
  117.             return obj;  
  118.         }  
  119.   
  120.         /// <summary>   
  121.         /// 反序列化集合对象  
  122.         /// </summary>   
  123.         public static T[] JsonDeserializeByArrayData<T>(string jsonString)  
  124.         {  
  125.             //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式    
  126.             string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";  
  127.             MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);  
  128.             Regex reg = new Regex(p);  
  129.             jsonString = reg.Replace(jsonString, matchEvaluator);  
  130.             DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[]));  
  131.             MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  
  132.             T[] arrayObj = (T[])ser.ReadObject(ms);  
  133.             return arrayObj;  
  134.         }  
  135.   
  136.         /// <summary>   
  137.         /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串   
  138.         /// </summary>   
  139.         private static string ConvertJsonDateToDateString(Match m)  
  140.         {  
  141.             string result = string.Empty;  
  142.             DateTime dt = new DateTime(1970, 1, 1);  
  143.             dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));  
  144.             dt = dt.ToLocalTime();  
  145.             result = dt.ToString("yyyy-MM-dd HH:mm:ss");  
  146.             return result;  
  147.         }  
  148.   
  149.         /// <summary>    
  150.         /// 将时间字符串转为Json时间   
  151.         /// </summary>   
  152.         private static string ConvertDateStringToJsonDate(Match m)  
  153.         {  
  154.             string result = string.Empty;  
  155.             DateTime dt = DateTime.Parse(m.Groups[0].Value);  
  156.             dt = dt.ToUniversalTime();  
  157.             TimeSpan ts = dt - DateTime.Parse("1970-01-01");  
  158.             result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);  
  159.             return result;  
  160.         }  
  161.   
  162.         /// <summary>  
  163.         /// List转成json   
  164.         /// </summary>  
  165.         /// <typeparam name="T"></typeparam>  
  166.         /// <param name="list"></param>  
  167.         /// <returns></returns>  
  168.         public static string ListToJson<T>(IList<T> list)  
  169.         {  
  170.             object obj = list[0];  
  171.             return ListToJson<T>(list, obj.GetType().Name);  
  172.         }  
  173.   
  174.         /// <summary>   
  175.         /// 对象转换为Json字符串   
  176.         /// </summary>   
  177.         /// <param name="jsonObject">对象</param>   
  178.         /// <returns>Json字符串</returns>   
  179.         public static string ToJson(object jsonObject)  
  180.         {  
  181.             try  
  182.             {  
  183.                 StringBuilder jsonString = new StringBuilder();  
  184.                 jsonString.Append("{");  
  185.                 PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();  
  186.                 for (int i = 0; i < propertyInfo.Length; i++)  
  187.                 {  
  188.                     object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);  
  189.                     if (objectValue == null)  
  190.                     {  
  191.                         continue;  
  192.                     }  
  193.                     StringBuilder value = new StringBuilder();  
  194.                     if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)  
  195.                     {  
  196.                         value.Append("\"" + objectValue.ToString() + "\"");  
  197.                     }  
  198.                     else if (objectValue is string)  
  199.                     {  
  200.                         value.Append("\"" + objectValue.ToString() + "\"");  
  201.                     }  
  202.                     else if (objectValue is IEnumerable)  
  203.                     {  
  204.                         value.Append(ToJson((IEnumerable)objectValue));  
  205.                     }  
  206.                     else  
  207.                     {  
  208.                         value.Append("\"" + objectValue.ToString() + "\"");  
  209.                     }  
  210.                     jsonString.Append("\"" + propertyInfo[i].Name + "\":" + value + ","); ;  
  211.                 }  
  212.                 return jsonString.ToString().TrimEnd(',') + "}";  
  213.             }  
  214.             catch (Exception ex)  
  215.             {  
  216.                 throw ex;  
  217.             }  
  218.         }  
  219.   
  220.         /// <summary>   
  221.         /// 对象集合转换Json   
  222.         /// </summary>   
  223.         /// <param name="array">集合对象</param>   
  224.         /// <returns>Json字符串</returns>   
  225.         public static string ToJson(IEnumerable array)  
  226.         {  
  227.             string jsonString = "[";  
  228.             foreach (object item in array)  
  229.             {  
  230.                 jsonString += ToJson(item) + ",";  
  231.             }  
  232.             if (jsonString.Length > 1)  
  233.             {  
  234.                 jsonString.Remove(jsonString.Length - 1, jsonString.Length);  
  235.             }  
  236.             else  
  237.             {  
  238.                 jsonString = "[]";  
  239.             }  
  240.             return jsonString + "]";  
  241.         }  
  242.   
  243.         /// <summary>   
  244.         /// 普通集合转换Json   
  245.         /// </summary>   
  246.         /// <param name="array">集合对象</param>   
  247.         /// <returns>Json字符串</returns>   
  248.         public static string ToArrayString(IEnumerable array)  
  249.         {  
  250.             string jsonString = "[";  
  251.             foreach (object item in array)  
  252.             {  
  253.                 jsonString = ToJson(item.ToString()) + ",";  
  254.             }  
  255.             jsonString.Remove(jsonString.Length - 1, jsonString.Length);  
  256.             return jsonString + "]";  
  257.         }  
  258.   
  259.         /// <summary>   
  260.         /// Datatable转换为Json   
  261.         /// </summary>   
  262.         /// <param name="table">Datatable对象</param>   
  263.         /// <returns>Json字符串</returns>   
  264.         public static string ToJson(DataTable dt)  
  265.         {  
  266.             StringBuilder jsonString = new StringBuilder();  
  267.             jsonString.Append("[");  
  268.             DataRowCollection drc = dt.Rows;  
  269.             for (int i = 0; i < drc.Count; i++)  
  270.             {  
  271.                 jsonString.Append("{");  
  272.                 for (int j = 0; j < dt.Columns.Count; j++)  
  273.                 {  
  274.                     string strKey = dt.Columns[j].ColumnName;  
  275.                     string strValue = drc[i][j].ToString();  
  276.                     Type type = dt.Columns[j].DataType;  
  277.                     jsonString.Append("\"" + strKey + "\":");  
  278.                     strValue = StringFormat(strValue, type);  
  279.                     if (j < dt.Columns.Count - 1)  
  280.                     {  
  281.                         jsonString.Append(strValue + ",");  
  282.                     }  
  283.                     else  
  284.                     {  
  285.                         jsonString.Append(strValue);  
  286.                     }  
  287.                 }  
  288.                 jsonString.Append("},");  
  289.             }  
  290.             jsonString.Remove(jsonString.Length - 1, 1);  
  291.             jsonString.Append("]");  
  292.             if (jsonString.Length == 1)  
  293.             {  
  294.                 return "[]";  
  295.             }  
  296.             return jsonString.ToString();  
  297.         }  
  298.   
  299.         /// <summary>  
  300.         /// DataTable转成Json   
  301.         /// </summary>  
  302.         /// <param name="jsonName"></param>  
  303.         /// <param name="dt"></param>  
  304.         /// <returns></returns>  
  305.         public static string ToJson(DataTable dt, string jsonName)  
  306.         {  
  307.             StringBuilder Json = new StringBuilder();  
  308.             if (string.IsNullOrEmpty(jsonName))  
  309.                 jsonName = dt.TableName;  
  310.             Json.Append("{\"" + jsonName + "\":[");  
  311.             if (dt.Rows.Count > 0)  
  312.             {  
  313.                 for (int i = 0; i < dt.Rows.Count; i++)  
  314.                 {  
  315.                     Json.Append("{");  
  316.                     for (int j = 0; j < dt.Columns.Count; j++)  
  317.                     {  
  318.                         Type type = dt.Rows[i][j].GetType();  
  319.                         Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j] is DBNull ? string.Empty : dt.Rows[i][j].ToString(), type));  
  320.                         if (j < dt.Columns.Count - 1)  
  321.                         {  
  322.                             Json.Append(",");  
  323.                         }  
  324.                     }  
  325.                     Json.Append("}");  
  326.                     if (i < dt.Rows.Count - 1)  
  327.                     {  
  328.                         Json.Append(",");  
  329.                     }  
  330.                 }  
  331.             }  
  332.             Json.Append("]}");  
  333.             return Json.ToString();  
  334.         }  
  335.   
  336.         /// <summary>   
  337.         /// DataReader转换为Json   
  338.         /// </summary>   
  339.         /// <param name="dataReader">DataReader对象</param>   
  340.         /// <returns>Json字符串</returns>   
  341.         public static string ToJson(IDataReader dataReader)  
  342.         {  
  343.             try  
  344.             {  
  345.                 StringBuilder jsonString = new StringBuilder();  
  346.                 jsonString.Append("[");  
  347.   
  348.                 while (dataReader.Read())  
  349.                 {  
  350.                     jsonString.Append("{");  
  351.                     for (int i = 0; i < dataReader.FieldCount; i++)  
  352.                     {  
  353.                         Type type = dataReader.GetFieldType(i);  
  354.                         string strKey = dataReader.GetName(i);  
  355.                         string strValue = dataReader[i].ToString();  
  356.                         jsonString.Append("\"" + strKey + "\":");  
  357.                         strValue = StringFormat(strValue, type);  
  358.                         if (i < dataReader.FieldCount - 1)  
  359.                         {  
  360.                             jsonString.Append(strValue + ",");  
  361.                         }  
  362.                         else  
  363.                         {  
  364.                             jsonString.Append(strValue);  
  365.                         }  
  366.                     }  
  367.                     jsonString.Append("},");  
  368.                 }  
  369.                 if (!dataReader.IsClosed)  
  370.                 {  
  371.                     dataReader.Close();  
  372.                 }  
  373.                 jsonString.Remove(jsonString.Length - 1, 1);  
  374.                 jsonString.Append("]");  
  375.                 if (jsonString.Length == 1)  
  376.                 {  
  377.                     return "[]";  
  378.                 }  
  379.                 return jsonString.ToString();  
  380.             }  
  381.             catch (Exception ex)  
  382.             {  
  383.                 throw ex;  
  384.             }  
  385.         }  
  386.   
  387.         /// <summary>   
  388.         /// DataSet转换为Json   
  389.         /// </summary>   
  390.         /// <param name="dataSet">DataSet对象</param>   
  391.         /// <returns>Json字符串</returns>   
  392.         public static string ToJson(DataSet dataSet)  
  393.         {  
  394.             string jsonString = "{";  
  395.             foreach (DataTable table in dataSet.Tables)  
  396.             {  
  397.                 jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";  
  398.             }  
  399.             jsonString = jsonString.TrimEnd(',');  
  400.             return jsonString + "}";  
  401.         }  
  402.   
  403.         /// <summary>  
  404.         /// 过滤特殊字符  
  405.         /// </summary>  
  406.         /// <param name="s"></param>  
  407.         /// <returns></returns>  
  408.         public static string String2Json(String s)  
  409.         {  
  410.             StringBuilder sb = new StringBuilder();  
  411.             for (int i = 0; i < s.Length; i++)  
  412.             {  
  413.                 char c = s.ToCharArray()[i];  
  414.                 switch (c)  
  415.                 {  
  416.                     case '\"':  
  417.                         sb.Append("\\\""); break;  
  418.                     case '\\':  
  419.                         sb.Append("\\\\"); break;  
  420.                     case '/':  
  421.                         sb.Append("\\/"); break;  
  422.                     case '\b':  
  423.                         sb.Append("\\b"); break;  
  424.                     case '\f':  
  425.                         sb.Append("\\f"); break;  
  426.                     case '\n':  
  427.                         sb.Append("\\n"); break;  
  428.                     case '\r':  
  429.                         sb.Append("\\r"); break;  
  430.                     case '\t':  
  431.                         sb.Append("\\t"); break;  
  432.                     case '\v':  
  433.                         sb.Append("\\v"); break;  
  434.                     case '\0':  
  435.                         sb.Append("\\0"); break;  
  436.                     default:  
  437.                         sb.Append(c); break;  
  438.                 }  
  439.             }  
  440.             return sb.ToString();  
  441.         }  
  442.   
  443.         /// <summary>  
  444.         /// 格式化字符型、日期型、布尔型  
  445.         /// </summary>  
  446.         /// <param name="str"></param>  
  447.         /// <param name="type"></param>  
  448.         /// <returns></returns>  
  449.         private static string StringFormat(string str, Type type)  
  450.         {  
  451.             if (type != typeof(string) && string.IsNullOrEmpty(str))  
  452.             {  
  453.                 str = "\"" + str + "\"";  
  454.             }  
  455.             else if (type == typeof(string))  
  456.             {  
  457.                 str = String2Json(str);  
  458.                 str = "\"" + str + "\"";  
  459.             }  
  460.             else if (type == typeof(DateTime))  
  461.             {  
  462.                 str = "\"" + str + "\"";  
  463.             }  
  464.             else if (type == typeof(bool))  
  465.             {  
  466.                 str = str.ToLower();  
  467.             }  
  468.             else if (type == typeof(byte[]))  
  469.             {  
  470.                 str = "\"" + str + "\"";  
  471.             }  
  472.             else if (type == typeof(Guid))  
  473.             {  
  474.                 str = "\"" + str + "\"";  
  475.             }  
  476.             return str;  
  477.         }  
  478.     }  
  479. }  


原作者不详,转自【http://www.open-open.com/lib/view/open1391265479317.html】

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值