json 转换

Posted on 2017-07-14 16:37  熊先生丶  阅读(239)  评论(0编辑  收藏  举报
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Xml;
using System.Web;
using System.Web.Script.Serialization;
using System.Runtime.Serialization.Json;
using System.Xml.Serialization;
using System.Text.RegularExpressions;

namespace Maticsoft.COM
{
    /// <summary>
    /// 数据转换类
    /// </summary>
    public static class Transform
    {

        /// <summary>
        /// json序列化(非二进制方式)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <returns></returns>
        public static string JsonSerializer<T>(T t)
        {
            JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
            return jsonSerialize.Serialize(t);
        }
        /// <summary>
        /// 把对象转换成Json格式的字符串
        /// </summary>
        /// <param name="o">对象</param>
        /// <returns>返回Json格式的字符串</returns>
        public static string ToJsonString(Object o)
        {
            JavaScriptSerializer script = new JavaScriptSerializer();
            string str = script.Serialize(o);
            //处理日期格式转换的问题
            str = 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>
        /// 把DataSet转换成Json格式的字符串
        /// </summary>
        /// <param name="dataset">DataSet数据集</param>
        /// <returns>返回Json格式的字符串</returns>
        public static string ToJsonString(DataSet dataset)
        {
            List<List<Dictionary<string, string>>> m_list = new List<List<Dictionary<string, string>>>();
            foreach (DataTable dt in dataset.Tables)
            {

                List<Dictionary<string, string>> m_table = new List<Dictionary<string, string>>();
                foreach (DataRow dr in dt.Rows)
                {
                    Dictionary<string, string> m_row = new Dictionary<string, string>();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        m_row.Add(dc.ColumnName, dr[dc].ToString());
                    }
                    m_table.Add(m_row);
                }
                m_list.Add(m_table);
            }
            return ToJsonString(m_list);
        }

        /// <summary>
        /// 把XmlDocument对象转换成Json格式的字符串
        /// </summary>
        /// <param name="doc">XmlDocument对象</param>
        /// <returns>返回Json格式的字符串</returns>
        public static string ToJsonString(XmlDocument doc)
        {
            XmlNodeList oNodes = doc.DocumentElement.ChildNodes;
            List<Dictionary<string, string>> m_List = new List<Dictionary<string, string>>();
            foreach (XmlNode oNode in oNodes)
            {
                Dictionary<string, string> dir = new Dictionary<string, string>();
                foreach (XmlAttribute Attr in oNode.Attributes)
                {
                    dir.Add(Attr.Name, Attr.Value);
                }
                m_List.Add(dir);
            }
            return ToJsonString(m_List);
        }

        /// <summary>
        /// 把DataTable对象转换成Json格式的字符串
        /// </summary>
        /// <param name="datatable">DataTable对象</param>
        /// <returns>返回Json格式的字符串</returns>
        public static string ToJsonString(DataTable datatable)
        {
            List<Dictionary<string, string>> m_table = new List<Dictionary<string, string>>();
            foreach (DataRow dr in datatable.Rows)
            {
                Dictionary<string, string> m_row = new Dictionary<string, string>();
                foreach (DataColumn dc in datatable.Columns)
                {
                    m_row.Add(dc.ColumnName, dr[dc].ToString());
                }
                m_table.Add(m_row);
            }
            return ToJsonString(m_table);
        }

        /// <summary>
        /// Json格式的字符串转换成指定类型的对象
        /// </summary>
        /// <param name="JsonString">son格式的字符串</param>
        /// <param name="t">转换的类型</param>
        /// <returns>转换后的对象</returns>
        public static object parseJSON(string JsonString, Type t)
        {
            object o = null;
            MemoryStream stream1 = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(JsonString));
            DataContractJsonSerializer dataSer = new DataContractJsonSerializer(t);
            try
            {
                o = dataSer.ReadObject(stream1);
            }
            catch (Exception eorr)
            {
                throw eorr;
            }
            finally
            {
                stream1.Close();
                stream1.Dispose();
            }

            return o;
        }

        /// <summary>
        /// Json格式的字符串转换成指定类型的对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="JsonString"></param>
        /// <returns></returns>
        public static T JSONToObject<T>(string JsonString)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                return jss.Deserialize<T>(JsonString);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 转换成xml字符串
        /// </summary>
        /// <param name="type">对象类型</param>
        /// <param name="o">转换的对象</param>
        /// <returns></returns>
        public static string ObjectToXmlString(Type type, object o)
        {
            return ObjectToXmlDocument(type, o).OuterXml;
        }

        /// <summary>
        /// 转换成xml对象
        /// </summary>
        /// <param name="type">对象类型</param>
        /// <param name="o">转换的对象</param>
        /// <returns></returns>
        public static XmlDocument ObjectToXmlDocument(Type type, object o)
        {
            XmlSerializer mySerializer = new XmlSerializer(type);
            Stream oStream = new MemoryStream();
            StreamWriter stream = new StreamWriter(oStream);
            mySerializer.Serialize(stream, o);
            oStream.Position = 0;
            TextReader textReader = new StreamReader(oStream);
            XmlDocument doc = new XmlDocument();
            doc.Load(textReader);
            stream.Close();
            return doc;
        }

        /// <summary>
        /// 转换字符串为GUID
        /// </summary>
        /// <param name="sVal">字符串</param>
        /// <returns>GUID对象</returns>
        public static object GetDBGUIDVal(string sVal)
        {
            object ob = null;
            if (string.IsNullOrEmpty(sVal))
            {
                ob = DBNull.Value;
            }
            else
            {
                Guid g = new Guid(sVal);
                return g;
            }
            return ob;
        }

        /// <summary>
        /// 转换GUID为object
        /// </summary>
        /// <param name="gVal">GUID</param>
        /// <returns>GUID对象</returns>
        public static object GetDBGUIDVal(Guid gVal)
        {
            object ob = null;
            if (gVal == Guid.Empty || gVal == null)
            {
                ob = DBNull.Value;
            }
            else
            {
                return gVal;
            }
            return ob;
        }

        /// <summary>
        /// 转换DateTime为数据字段类型
        /// </summary>
        /// <returns></returns>
        public static object GetDBDateTime(DateTime dt)
        {
            object ob = null;
            if (dt == null)
                ob = DBNull.Value;
            else
                return dt;
            return ob;
        }

        /// <summary>
        /// 获取object的布尔值
        /// </summary>
        /// <param name="ov"></param>
        /// <returns></returns>
        public static bool GetBoolValue(object ov)
        {
            if (ov == null)
                return false;
            if (ov.ToString().Equals("1"))
                return true;
            if (ov.ToString().Equals("true"))
                return true;
            if (ov.ToString().Equals("True"))
                return true;
            return false;
        }

        /// <summary>
        /// 获取string的布尔值
        /// </summary>
        /// <param name="ov"></param>
        /// <returns></returns>
        public static bool GetBoolValue(string sv)
        {
            if (sv.Equals("1"))
                return true;
            if (sv.ToLower().Equals("true"))
                return true;
            return false;
        }
        /// <summary>
        /// 将对象属性转换为key-value对
        /// </summary>   
        /// <param name="o"></param>   
        /// <returns></returns>   
        public static Dictionary<String, Object> ToPropDictionary(Object o)
        {
            Dictionary<String, Object> map = new Dictionary<string, object>();
            Type t = o.GetType();
            PropertyInfo[] pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo p in pi)
            {
                MethodInfo mi = p.GetGetMethod();

                if (mi != null && mi.IsPublic)
                {
                    try
                    {
                        map.Add(p.Name, mi.Invoke(o, new Object[] { }));
                    }
                    catch (Exception e)
                    {
                    }
                }
            }

            return map;
        }

        /// <summary>
        /// 把DataTable对象转换成TreeGrid支持的Json格式字符串
        /// </summary>
        /// <param name="datatable">DataTable对象</param>
        /// <param name="CurrField">主键</param>
        /// <param name="ParentField">父级主键</param>
        /// <returns>返回Json格式的字符串</returns>
        public static string ToJsonStringForTreeList(DataTable datatable, string CurrField, string ParentField, string IdValue)
        {
            List<Dictionary<string, string>> m_table = new List<Dictionary<string, string>>();
            //DataRow[] aryDr = datatable.Select(string.Format(ParentField+" is null");
            DataRow[] aryDr = datatable.Select(string.Format("ID='{0}'", IdValue));
            foreach (DataRow dr in aryDr)
            {
                string ParACode = string.Empty;
                Dictionary<string, string> m_row = new Dictionary<string, string>();
                foreach (DataColumn dc in datatable.Columns)
                {
                    m_row.Add(dc.ColumnName, dr[dc].ToString());
                }

                //判断是否有子级节点
                ParACode = dr[CurrField].ToString();
                if (!string.IsNullOrEmpty(ParACode))
                {
                    getSubDic(datatable, ParentField, ParACode, ref m_row, CurrField);
                }
                m_table.Add(m_row);
            }
            return ToJsonString(m_table);
        }
        private static void getSubDic(DataTable datatable,
            string ParentField,
            string ParentCode,
            ref Dictionary<string, string> parentDic,
            string CurrField)
        {
            DataRow[] arySubDr = datatable.Select(string.Format("{1}='{0}'", ParentCode, ParentField));
            if (arySubDr.Length != 0)
            {
                List<string> subDic = new List<string>();
                foreach (DataRow dr in arySubDr)
                {
                    Dictionary<string, string> subRowDic = new Dictionary<string, string>();
                    foreach (DataColumn dc in datatable.Columns)
                    {
                        subRowDic.Add(dc.ColumnName, dr[dc].ToString());
                    }
                    //判断是否有子级节点
                    if (!string.IsNullOrEmpty(dr[CurrField].ToString()))
                    {
                        getSubDic(datatable, ParentField, dr[CurrField].ToString(), ref subRowDic, CurrField);
                    }
                    subDic.Add(ToJsonString(subRowDic));
                }
                parentDic.Add("state", "closed");
                parentDic.Add("children", ToJsonString(subDic));
            }
        }
        /// <summary>
        /// 将一个object对象序列化,返回一个byte[]
        /// </summary>
        /// <param name="obj">能序列化的对象</param>
        /// <returns></returns>
        public static byte[] ObjectToBytes(object obj)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj);
                return ms.GetBuffer();
            }
        }
        #region 字符加密为MD5 Methods - Encode


        #endregion

        /// <summary>
        /// 过滤不安全的字符串
        /// </summary>
        /// <param name="Str"></param>
        /// <returns></returns>
        public static string FilteSQLStr(string Str)
        {

            Str = Str.Replace("delete", "");
            Str = Str.Replace("update", "");
            Str = Str.Replace("insert", "");
            Str = Str.Replace("drop", "");
            Str = Str.Replace("DELETE", "");
            Str = Str.Replace("UPDATE", "");
            Str = Str.Replace("INSERT", "");
            Str = Str.Replace("DROP", "");
            return Str;
        }
    }
}