首页 > 其他分享 >JSON序列化和反序列化日期时间的处理

JSON序列化和反序列化日期时间的处理

时间:2023-04-07 10:08:39浏览次数:53  
标签:jsonString string 日期 JSON using Date new 序列化


JSON格式不直接支持日期和时间。DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,其中第一个数字(在提供的示例中为 700000)是 GMT 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于Local类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。

     修改Person类,添加LastLoginTime:

 


1. public class Person  
2. {     
3. public string Name { get; set; }     
4. public int Age { get; set; }  
5. public DateTime LastLoginTime { get; set; }     
6.  }

 

1. Person p = new Person();     
2. p.Name = "张三";     
3. p.Age = 28;     
4. p.LastLoginTime = DateTime.Now;     
5. string jsonString = JsonHelper.JsonSerializer<Person>(p);

 

序列化结果:

{"Age":28,"LastLoginTime":"//Date(1294499956278+0800)//","Name":"张三"}

     1 、在后台使用正则表达式对其替换处理。修改JsonHelper:

 


1. using System;  
2. using System.Collections.Generic;  
3. using System.Linq;  
4. using System.Web;     
5. using System.Runtime.Serialization.Json;     
6. using System.IO;     
7. using System.Text;     
8. using System.Text.RegularExpressions;     
9. /// <summary>    
10. /// JSON序列化和反序列化辅助类    
11. /// </summary>    
12. public class JsonHelper    
13. {    
14. /// <summary>    
15. /// JSON序列化    
16. /// </summary>    
17. public static string JsonSerializer<T>(T t)    
18.      {    
19. new DataContractJsonSerializer(typeof(T));    
20. new MemoryStream();    
21.         ser.WriteObject(ms, t);    
22. string jsonString = Encoding.UTF8.GetString(ms.ToArray());    
23.          ms.Close();    
24. //替换Json的Date字符串    
25. string p = @"///Date/((/d+)/+/d+/)///"; /*Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)*/  
26. new MatchEvaluator(ConvertJsonDateToDateString);    
27. new Regex(p);    
28.          jsonString = reg.Replace(jsonString, matchEvaluator);    
29. return jsonString;    
30.      }    
31. /// <summary>    
32. /// JSON反序列化    
33. /// </summary>    
34. public static T JsonDeserialize<T>(string jsonString)    
35.      {    
36. //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式    
37. string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";    
38. new MatchEvaluator(ConvertDateStringToJsonDate);    
39. new Regex(p);    
40.          jsonString = reg.Replace(jsonString, matchEvaluator);    
41. new DataContractJsonSerializer(typeof(T));    
42. new MemoryStream(Encoding.UTF8.GetBytes(jsonString));    
43.          T obj = (T)ser.ReadObject(ms);    
44. return obj;    
45.      }    
46.       
47. /// <summary>    
48. /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串    
49. /// </summary>    
50. private static string ConvertJsonDateToDateString(Match m)    
51.      {    
52. string result = string.Empty;    
53. new DateTime(1970,1,1);    
54. long.Parse(m.Groups[1].Value));    
55.          dt = dt.ToLocalTime();    
56. "yyyy-MM-dd HH:mm:ss");    
57. return result;    
58.      }    
59. /// <summary>    
60. /// 将时间字符串转为Json时间    
61. /// </summary>    
62. private static string ConvertDateStringToJsonDate(Match m)    
63.      {    
64. string result = string.Empty;    
65.          DateTime dt = DateTime.Parse(m.Groups[0].Value);    
66.          dt = dt.ToUniversalTime();    
67. "1970-01-01");    
68. string.Format("///Date({0}+0800)///",ts.TotalMilliseconds);    
69. return result;    
70.     }    
71.  }

 

 序列化Demo:

 


1. Person p = new Person();     
2. p.Name = "张三";     
3. p.Age = 28;     
4. p.LastLoginTime = DateTime.Now;    
5. string jsonString = JsonHelper.JsonSerializer<Person>(p);

 

运行结果:



{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":"张三"}


       反序列化Demo:



string json = "{/"Age/":28,/"LastLoginTime/":/"2011-01-09 00:30:00/",/"Name/":/"张三/"}";


p=JsonHelper.JsonDeserialize<Person>(json);


        运行结果:

JSON序列化和反序列化日期时间的处理_json

在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。

     2、利用JavaScript处理

 



1. function ChangeDateFormat(jsondate) {     
2. "/Date(", "").replace(")/", "");     
3. if (jsondate.indexOf("+") > 0) {    
4. "+"));     
5.     }     
6. else if (jsondate.indexOf("-") > 0) {    
7. "-"));     
8.      }     
9.      
10. var date = new Date(parseInt(jsondate, 10));   
11. var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;    
12. var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();    
13. return date.getFullYear() + "-" + month + "-" + currentDate;    
14.  }



 

简单Demo :



ChangeDateFormat("//Date(1294499956278+0800)//");



     结果:

2011-1-8


 

标签:jsonString,string,日期,JSON,using,Date,new,序列化
From: https://blog.51cto.com/u_4387387/6174577

相关文章

  • 日期问题合集
    日期问题合集求解两个日期之间的差值有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。输入格式输入包含多组测试数据。每组数据占两行,分别表示两个日期,形式为YYYYMMDD。输出格式每组数据输出一行,即日期差值。数据范围年份范围$[1,9......
  • jquery 根据开始日期加天数计算有效期
    functiondateTime(startDate,dayTime){//起始日期,天数  vardate=newDate(startDate);  varnewDate=newDate(date.getFullYear(),date.getMonth(),date.getDate()+dayTime);  varyear1=date.getFullYear();  varmonth1=date.getMonth()+1;  var......
  • 函数-日期函数
    常见的日期函数:  代码:selectcurdate();/*返回当前日期*/selectcurtime();/*返回当前时间*/selectnow();/*返回当前日期+时间*/selectyear(now());/*返回当前日期中的年份*/selectmonth(now());/*返回当前日期中的月份*/selectday(now());/*返回当前日期中的日份......
  • 序列化与transient关键字
    什么是序列化?看到别人说的感觉非常的好。简单来说,我们把对象从内存中变成可存储或传输的过程称之为序列化。 为什么要用序列化?简单来说,我们把对象从内存中变成可存储或传输的过程称之为序列化。 序列化的应用1)将数据转换成二进制流的形式,用于数......
  • 回文日期
    2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后......
  • HTTP JSON接口模拟工具interfake的使用(模拟接口返回json数据)
    场景在与第三方系统进行模拟对接时,需要本地根据接口文档的示例json数据快速模拟出来接口进行调试用。Interfake官方github地址:https://github.com/basicallydan/interfakeInterfake能简便地创建虚假的HTTPAPI,只需简单几行代码就可以创建模拟JSON接口(使用命令行方式也可以......
  • go语言发送请求后接收到json如何提取其中指定参数
    由于用过python的缘故,一开始想着直接取后来发现并不行,于是上网查找资料发现需要定义结构体绑定参数,后来定义完结构体后发现并没有解决问题,而且过程较为繁琐,于是想着先将接收到的数据转为字符串body,_:=io.ReadAll(response.Body)fmt.Println(string(body))利用上面的代码发......
  • STATA 日期型数据显示格式调整
    useceshi1,clear.list//+--------------------+//|A3_1A3_2A3_3|//|--------------------|//1.|196752|//2.|1945822|//3.|1949314|//4.|1986616|//5.|195......
  • @JsonIgnore 失效没起作用及 @JSONField(serialize = false)
    项目中需要对接口返回的某一个字段进行屏蔽,返回给前端响应的时候,不显示某个字段。第一时间想到在实体类屏蔽的属性字段上添加@JsonIgnore注解,但添加之后并没有起作用。在网上搜索了下,使用@JSONField(serialize=false)注解,便可以在返回响应参数体的时候去除某个字段。......
  • Javascript中扁平化数据结构与JSON树形结构转换详解
    Javascript中扁平化数据结构与JSON树形结构转换详解原文链接:https://www.jb51.net/article/247525.htm+目录一.先说简单的树形结构数扁平化处理二.再讲将扁平化数据结构转JSON树状形结构扩充一个知识点:forin与forof的区别:总结不废话,直接开干一.先说简单的树形结构数......