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;  
            }
  • 相关阅读:
    Java基础算法--排序
    Java基础之String类的细节问题
    Java数据结构四之——二叉树的前、中、后序遍历
    动态规划之----最长公共子序列(LCS)
    最长公共子串问题
    makefile学习笔记
    使用正则表达式,去除C++的注释
    gbk字库音序对照表
    Fsharp 类中的空字段
    使用FSharp 探索Dotnet图像处理功能2--均衡灰度
  • 原文地址:https://www.cnblogs.com/jameslif/p/5118401.html
Copyright © 2011-2022 走看看