zoukankan      html  css  js  c++  java
  • .Net3.5扩展方法实现对象JSON序列化

    .NET 3.5 还包含一个新的new System.Runtime.Serialization.DataContractJsonSerializer class 类 ,你也可以用它来做JSON (JavaScript Object Notation)序列化/反序列化的工作。  

    /// <summary>
        /// Json数据转换封装
        /// </summary>
        public static class JsonHelper
        {
            /// <summary>
            /// 将时间由"\/Date(10000000000-0700)\/" 格式转换成 "yyyy-MM-dd HH:mm:ss" 格式的字符串
            /// </summary>
            /// <param name="m"></param>
            /// <returns></returns>
            private static string GetDatetimeString(Match m)
            {
                string sRet = "";
                try
                {
                    System.DateTime dt = new DateTime(1970, 1, 1);
                    dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
                    dt = dt.ToLocalTime();
                    sRet = dt.ToString("yyyy-MM-dd HH:mm:ss");
                }
                catch
                { }

                return sRet;
            }

            /// <summary>
            /// 将时间由 "yyyy-MM-dd HH:mm:ss" 格式的字符串转换成"\/Date(10000000000-0700)\/" 格式
            /// </summary>
            /// <param name="m"></param>
            /// <returns></returns>
            private static string GetDatetimeJson(Match m)
            {
                String sRet = "";
                try
                {
                    DateTime dt = DateTime.Parse(m.Groups[1].Value);
                    dt = dt.ToUniversalTime();
                    TimeSpan ts = dt - DateTime.Parse("1970-01-01");
                    sRet = string.Format("\\/Date({0}-0700)\\/", ts.TotalMilliseconds);
                }
                catch
                { }
                return sRet;
            }

            /// <summary>
            /// 扩展Object 方法 ToJson
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static String ToJson(this object obj)
            {
                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
                MemoryStream ms = new MemoryStream();
                jsonSerializer.WriteObject(ms, obj);

                String sRet = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();

                //将时间由"\/Date(10000000000-0700)\/" 格式转换成 "yyyy-MM-dd HH:mm:ss" 格式的字符串
                string sPattern = @"\\/Date\((\d+)-\d+\)\\/";
                MatchEvaluator myMatchEvaluator = new MatchEvaluator(GetDatetimeString);
                Regex reg = new Regex(sPattern);
                sRet = reg.Replace(sRet, myMatchEvaluator);
               
                return sRet;
            }

            /// <summary>
            /// Jason deSerialize
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="sJason"></param>
            /// <returns></returns>
            public static T FromJson<T>(String sJasonData)
            {
                //将时间由 "yyyy-MM-dd HH:mm:ss" 格式的字符串转换成"\/Date(10000000000-0700)\/" 格式
                string sPattern = @"(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})";
                MatchEvaluator myMatchEvaluator = new MatchEvaluator(GetDatetimeJson);
                Regex reg = new Regex(sPattern);
                string src = reg.Replace(sJasonData, myMatchEvaluator);

                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(src));
                object obj = jsonSerializer.ReadObject(ms);

                return (T)obj;
            }

        }

     

    摘自:http://hi.baidu.com/woxxf/blog/item/66edcf51447d382343a75b5d.html

  • 相关阅读:
    海居住证我们不得不说的实情![转]
    SQL Server 日期和时间函数
    RESTORE DATABASE命令还原SQLServer 2005 数据库
    asp.net 部署数据库、开始菜单、桌面快捷方式实例(下)
    Server Application Unavailable asp.net 解决办法
    半个月,除了上班时间,而其他时间都不上网,你可以吗?(网络的郁闷)
    唐朝疆域地图[中亚势力范围(公元660年
    偶的偶像 陈松伶写真集
    Sql Server 行转列学习 根据学生表、课程表、学生成绩表统计每个学生的各科成绩和他的总成绩、平均成绩
    DIV+CSS 布局一行两列,左列固定宽度,右列自适应宽度;设置最小宽度,窗口小的时候显示滚动条.
  • 原文地址:https://www.cnblogs.com/kinpauln/p/1769758.html
Copyright © 2011-2022 走看看