C# JSON 转List<T>类

来源:互联网 发布:win10 软件桌面图标 编辑:程序博客网 时间:2024/05/16 17:08

因为项目需要,形成一个JSON帮助类

这是在.net3.5的环境下编写

除了要添加引用
System.Runtime.Serialization;

还要添加

System.ServiceModel

System.ServiceModel.Web


public class JsonHelper {        /// <summary>        /// 把Json转成List<T>        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="html"></param>        /// <returns></returns>        public static IList<T> JsonToList<T>(string html) {            IList<T> result = new List<T>();            html = FormatJson(html);            try {                DataContractJsonSerializer _Json = new DataContractJsonSerializer(result.GetType());                byte[] _Using = System.Text.Encoding.UTF8.GetBytes(html);                System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);                _MemoryStream.Position = 0;                object obj = _Json.ReadObject(_MemoryStream); ;                result = (IList<T>)obj;            }            catch (Exception) {                html = AttributeToVariable(html);                DataContractJsonSerializer _Json = new DataContractJsonSerializer(result.GetType());                byte[] _Using = System.Text.Encoding.UTF8.GetBytes(html);                System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);                _MemoryStream.Position = 0;                object obj = _Json.ReadObject(_MemoryStream); ;                result = (IList<T>)obj;            }            return result;        }        #region // 格式化Json字符串        /// <summary>        /// 格式化Json字符串,使之能转换成List        /// </summary>        /// <param name="html"></param>        /// <returns></returns>        public static string FormatJson(string value) {            string p = @"(new Date)\(+([0-9,-]+)+(\))";            MatchEvaluator matchEvaluator = new MatchEvaluator(FormatJsonMatch);            Regex reg = new Regex(p);            bool isfind = reg.IsMatch(value);            value = reg.Replace(value, matchEvaluator);            return value;        }        /// <summary>        /// 将Json序列化的时间由new Date(1373387734703)转为字符串"\/Date(1373387734703)\/"        /// </summary>        private static string FormatJsonMatch(Match m) {            return string.Format("\"\\/Date({0})\\/\"", m.Groups[2].Value);        }        #endregion // 格式化Json字符串        #region // 格式化日期        /// <summary>        /// 将Json序列化的时间由new Date(1373390933250) 或Date(1373390933250)或"\/Date(1373390933250+0800)\/"        /// 转为2013-07-09 17:28:53        /// 主要用于传给前台        /// </summary>        /// <param name="html"></param>        /// <returns></returns>        public static string FormatJsonDate(string value) {            string p = @"(new Date)\(+([0-9,-]+)+(\))";            MatchEvaluator matchEvaluator = new MatchEvaluator(FormatJsonDateMatch);            Regex reg = new Regex(p);            value = reg.Replace(value, matchEvaluator);            p = @"(Date)\(+([0-9,-]+)+(\))";            matchEvaluator = new MatchEvaluator(FormatJsonDateMatch);            reg = new Regex(p);            value = reg.Replace(value, matchEvaluator);            p = "\"\\\\\\/" + @"Date(\()([0-9,-]+)([+])([0-9,-]+)(\))" + "\\\\\\/\"";            matchEvaluator = new MatchEvaluator(FormatJsonDateMatch);            reg = new Regex(p);            value = reg.Replace(value, matchEvaluator);            return value;        }        /// <summary>        /// 将Json序列化的时间由Date(1294499956278+0800)转为字符串        /// </summary>        private static string FormatJsonDateMatch(Match m) {            string result = string.Empty;            DateTime dt = new DateTime(1970, 1, 1);            dt = dt.AddMilliseconds(long.Parse(m.Groups[2].Value));            dt = dt.ToLocalTime();            result = dt.ToString("yyyy-MM-dd HH:mm:ss");            return result;        }        #endregion // 格式化日期        #region // 属性和变量转换        /// <summary>        /// 属性转变量        /// 把"<address>k__BackingField":"1",        /// 转成"address":"1",        /// </summary>        /// <param name="value"></param>        /// <returns></returns>        public static string AttributeToVariable(string value) {            string p = @"\<([A-Z,a-z,0-9,_]*)\>k__BackingField";            MatchEvaluator matchEvaluator = new MatchEvaluator(AttributeToVariableMatch);            Regex reg = new Regex(p);            bool isfind = reg.IsMatch(value);            value = reg.Replace(value, matchEvaluator);            return value;        }        private static string AttributeToVariableMatch(Match m) {            return m.Groups[1].Value;        }        /// <summary>        /// 变量转属性        /// 把"address":"1",        /// 转成"<address>k__BackingField":"1",        /// </summary>        /// <param name="value"></param>        /// <returns></returns>        public static string VariableToAttribute(string value) {            string p = "\\\"([A-Z,a-z,0-9,_]*)\\\"\\:";            MatchEvaluator matchEvaluator = new MatchEvaluator(VariableToAttributeMatch);            Regex reg = new Regex(p);            bool isfind = reg.IsMatch(value);            value = reg.Replace(value, matchEvaluator);            return value;        }        private static string VariableToAttributeMatch(Match m) {            return string.Format("\"<{0}>k__BackingField\":", m.Groups[1].Value);        }        #endregion // 属性和变量转换    }

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机螺丝滑扣了怎么办 超极本没有网线接口怎么办 机动车禁令标识位置放置错误怎么办 六角头冲得不标准怎么办 滚丝杆烫手怎么办怎样能不烫手 带滚花的杆子里面脏怎么办 田螺和玉米吃了怎么办 lv包包螺丝掉了怎么办 螺狮那一段吃了怎么办 吃了不熟的田螺怎么办 包上的螺丝掉了怎么办 工厂打螺丝手疼怎么办 打螺丝打到手痛怎么办 欧曼gtl不烧尿素怎么办 放油螺丝滑牙怎么办 蝴蝶刀螺丝松了怎么办 婴儿车铆钉松了怎么办 扇子上的铆钉松怎么办 锅的把手松了怎么办 奶锅把手松了怎么办 锅的手柄烧坏了怎么办 鞋子上的铆钉生锈了怎么办 包包上的铆钉生锈了怎么办 凉鞋的铆钉生锈了怎么办 扇子的铆钉坏了怎么办 包包的铆钉坏了怎么办 汽车半轴螺丝母拧不动怎么办? 卫衣袖子短了怎么办 u型导轨蚊帐下垂怎么办 100的水管螺纹出漏水怎么办 吊顶螺丝没有防锈处理怎么办 膨胀螺丝洞松了怎么办 膨胀螺丝眼大了怎么办 墙上螺丝孔大了怎么办 膨胀螺丝孔深了怎么办 克霉膨胀栓的线怎么办 摩托车排气管螺丝断了怎么办 汽车轮胎螺丝卸不下来怎么办 内六角螺丝卸不下来怎么办 洗衣机六角螺丝卸不动怎么办 黄油嘴打不进去怎么办