zoukankan      html  css  js  c++  java
  • 含有日期类型对象的序列化合反序列化

    protected void Page_Load(object sender, EventArgs e)
            {
              
                Person p = new Person();   
                p.Name = "张三";   
                p.Age = 28;    
                p.LastLoginTime = DateTime.Now;    
                string jsonString = JsonSerializer<Person>(p);
            }
    
    
            
            public class Person    
            {   
                public string Name { get; set; }   
                public int Age { get; set; }    
                public DateTime LastLoginTime { get; set; }   
            }
    
            /// <summary> 
            /// JSON序列化  
            /// /// </summary>  
           public static string JsonSerializer<T>(T t)   
           {  
               DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
               MemoryStream ms = new MemoryStream();  
               ser.WriteObject(ms, t);  
               string jsonString = Encoding.UTF8.GetString(ms.ToArray());   
               ms.Close();   
               //替换Json的Date字符串   
               string p = @"\/Date((d+)+d+)\/";  
               MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);   
               Regex reg = new Regex(p);   
               jsonString = reg.Replace(jsonString, matchEvaluator);  
               return jsonString;   
           }  
            /// <summary>   
            /// JSON反序列化 
            /// </summary>  
            public static T JsonDeserialize<T>(string jsonString)   
            {   
                //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"/Date(1294499956278+0800)/"格式  
                string p = @"d{4}-d{2}-d{2}sd{2}:d{2}:d{2}";   
                MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);  
                Regex reg = new Regex(p);   
                jsonString = reg.Replace(jsonString, matchEvaluator);  
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));   
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));   
                T obj = (T)ser.ReadObject(ms);   
                return obj;   
            }  
            /// <summary>  
            /// /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串   
            /// </summary>   
            private static string ConvertJsonDateToDateString(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;  
            }
  • 相关阅读:
    使用git遇到的一些问题
    小程序的生命周期
    git status -s命令解析
    JavaScript 关闭浏览器窗口
    JavaScript 如何编写计算器
    JavaScript 数组对象的去重
    JavaScript 数组排序(从大到小,从小到大)
    JavaScript 常用的Math对象
    JavaScript 获取 当前日期和三十天以前日期
    JavaScript 获取数组的最大值和最小值
  • 原文地址:https://www.cnblogs.com/jameslif/p/5118401.html
Copyright © 2011-2022 走看看