zoukankan      html  css  js  c++  java
  • 包含时间的Json序列化

     public static string ObjectToJson<T>(T t)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                    serializer.WriteObject(ms, t);
                    ms.Position = 0;
                    using (StreamReader reader = new StreamReader(ms))
                    {
                        string json = reader.ReadToEnd();
                        string p = @"\/Date((d+)+d+)\/";
                        MatchEvaluator evaluator = new MatchEvaluator(ConvertJsonDataToDataString);
                        Regex reg = new Regex(p);
                        json = reg.Replace(json, evaluator);
                        return json;
                    }
                }
    
            }
    
            public static T JsonToObject<T>(string json)
            {
                string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";
                MatchEvaluator evaluator = new MatchEvaluator(ConvertDateStringToJsonDate);    //对时间进行处理
                Regex reg = new Regex(p);
                json = reg.Replace(json, evaluator);
                using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
                {
                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                    T data = (T)serializer.ReadObject(ms);
                    return data;
                }
            }
    
            /// <summary>
            /// 将Json时间转换为时间字符
            /// </summary>
            /// <param name="m"></param>
            /// <returns></returns>
            private static string ConvertJsonDataToDataString(Match m)
            {
                string result = string.Empty;
                DateTime dt = new DateTime(1970, 1, 1);
                dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
                dt = dt.ToLocalTime();
                result = dt.ToString("yyyy-MM-dd HH:mm:ss");
                return result;
            }
    
            /// <summary>
            /// 将时间字符转换成JSON时间
            /// </summary>
            private static string ConvertDateStringToJsonDate(Match m)
            {
                string result = string.Empty;
                DateTime dt = DateTime.Parse(m.Groups[0].Value);
                dt = dt.ToUniversalTime();
                TimeSpan ts = dt - DateTime.Parse("1970-01-01");
                result = string.Format("\/Date({0}+0800)\/", ts.TotalMilliseconds);
                return result;
            }
     [DataContract]
        public class RecentVisitors
        {
            [DataMember]
            public long UserId { get; set; }
            [DataMember]
            public string UserName { get; set; }
            [DataMember]
            public DateTime Dt { get; set; }
        }
    var jsonStr="[{"UserId":"123123","UserName":"小小苏","Dt":"2012-09-25 10:50:00"},{"UserId":"456456","UserName":"大头","Dt":"2012-09-25 10:50:00"}]";
    调用:
    1:JsonToObject<List<RecentVisitors>>(jsonStr)
    2:ObjectToJson<List<RecentVisitors>>(new List<RecentVisitors);
  • 相关阅读:
    Java基础教程
    一个RDBMS左连接SQL执行计划解析
    hive时间日期函数及典型场景应用
    ETL数据采集方法
    数据仓库保存历史数据方法之拉链表
    NAS服务器局域网内IPad、手机、电视盒子等联网播放
    转:主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Undelete 360
    [转]office2010一直卡在“正在受保护的视图中打开”
    [转]PROE传动链条的装配教程
    linux下svn定时更新项目
  • 原文地址:https://www.cnblogs.com/wzq806341010/p/3311779.html
Copyright © 2011-2022 走看看