含有日期类型对象的序列化合反序列化

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}\s\d{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;
        }
时间: 2025-01-01 08:23:57

含有日期类型对象的序列化合反序列化的相关文章

Qt中 使用Json 对自定义对象进行序列与反序列化 之二

在使用多态的情况下,通过基类的指针列表序列化时,需保存对象的类型信息.在反序列化时通过类型信息构造正确的子类对象.代码中类型信息使用C++ typeid获取,以保证可移植性. 全部代码如下: #include <QCoreApplication> #include <memory> #include <vector> #include <string> #include <iostream> #include <algorithm>

Qt中 使用Json 对自定义对象进行序列与反序列化 之一

没有使用多态的情况比较简单,完整代码如下: #include <QCoreApplication> #include <memory> #include <vector> #include <string> #include <iostream> #include <algorithm> #include <QFile> #include <QJsonDocument> #include <QJsonOb

含有Date类型的对象或集合转换成json时的问题

当我们把含有Date类型的对象或者集合直接转换为json,传回前台的时候不会报错,但是前台显示的时候是两个Object,而不会显示正常的日期. 当我们进debug调试的时候不会发现有错误,但是在解析JSON的时候就会发现: 在转换为JSON的过程中把date对象分开转化,即:年.月.日.时.分.秒,每个都当成一个对象给转化了. 这时候我们就需要做一些转换了 下面给大家提供一些大神给出常规的解决方案: 一:流星焱雨给出的解决方案 二:jadethao给出的解决方案 而当我们基本只需要临时显示日期的

spring mvc 注解访问控制器以及接收form数据的方式,包括直接接收日期类型及对象的方法

Spring 中配置扫描器 <!-- springmvc的扫描器--> <context:component-scan base-package="com.beifeng.servlet"/> 建立Controller 类 @Controller @RequestMapping(value="/sys/") public class RegController { @RequestMapping(value="reg.do"

java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import nu.xom.Document; import nu.

C# 将object类型对象(注:必须是可序列话的对象)转换为二进制序列字符串

1 public string SerializeObject(object obj) 2 { 3 //将object类型对象(注:必须是可序列化的对象)转换为二进制序列字符串 4 IFormatter formatter=new BinaryFormatter(); 5 string result=string.Empty; 6 using(MemoryStream stream=new MenmoryStream()) 7 { 8 formatter.Serialize(sream.obj)

Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

Java基础学习总结——Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

JavaScript 中的数字和日期类型

本章节介绍如何掌握Javascript里的数字和日期类型 数字EDIT 在 JavaScript 里面,数字都是双精度浮点类型的 double-precision 64-bit binary format IEEE 754 (也就是说一个数字只能在 -(253 -1) 和 253 -1之间).没有特定的数据类型为整型.除了能够表示浮点数,号码类型有三个符号值: +Infinity.-Infinity和 NaN (not-a-number).参见Javascript指南中的 JavaScript