C# JavaScriptSerializer序列化时的时间处理详解
发布时间 - 2026-01-11 02:58:17 点击率:次最近被序列化困扰了一下下。原因看下面代码
class Program
{
static void Main(string[] args)
{
var user = new User { UserId = "sb", CreateDate = DateTime.Now };
var serialier = new JavaScriptSerializer();
var json = serialier.Serialize(user);
Console.WriteLine(json);
Console.Read();
}
}
/// <summary>
/// 用户类.
/// </summary>
public class User
{
/// <summary>
/// 用户Id
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateDate { get; set; }
}
输出如下图所示:
猜测这里是由于js初始化时间的时候往往是向 1970/01/01 添加毫秒数,JavaScriptSerializer进行序列化的时候也会格式化为距离1970/01/01 到当该时间点GMT+0 时间的毫秒数,
如果直接反序列化可以看到少了8小时,且时间精度到毫秒,原来初始化的时间精度是10-7 秒。
这种时间格式是适用于js的,但如果我们想把这个信息保存的话,这样的时间格式不适合阅读。因此需要做一下转换。
以下代码利用正则表达式将毫秒数转换成本时区的时间格式:
class Program
{
static void Main(string[] args)
{
var user = new User { UserId = "sb", CreateDate = DateTime.Now };
var serialier = new JavaScriptSerializer();
var json = serialier.Serialize(user);
var jsonNomal = LocalSerialize(user);
Console.WriteLine("js序列化:" + json);
Console.WriteLine("本地序列化:" + jsonNomal);
Console.Read();
}
public static string LocalSerialize(object obj)
{
var jser = new JavaScriptSerializer();
var json = jser.Serialize(obj);
//将时间格式转换为适合阅读习惯的格式
json = Regex.Replace(json, @"\\/Date\((\d+)\)\\/", match =>
{
DateTime dt = new DateTime(1970, 1, 1);
dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
dt = dt.ToLocalTime(); //本地时间
return dt.ToString(); ;
});
return json;
}
}
/// <summary>
/// 用户类.
/// </summary>
public class User
{
/// <summary>
/// 用户Id
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateDate { get; set; }
}
输出:
这样就完成了转换了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# C#
# JavaScriptSerializer
# 序列化
# C# 使用multipart form-data方式post数据到服务器
# C#获取本地IP的四种方式示例详解
# C#监测IPv4v6网速及流量的实例代码
# c#获取客户端IP地址(考虑代理)
# C#应用ToolStrip控件使用方法
# C#使用GZipStream实现文件的压缩与解压
# C# 使用SharpZipLib生成压缩包的实例代码
# C#自定义IP输入框控件
# c# 文件压缩zip或将zip文件解压的方法
# C#多线程爬虫抓取免费代理IP的示例代码
# 使用C# 的webBrowser写模拟器时的javascript脚本调用问题
# C#实现文件压缩与解压的方法示例【ZIP格式】
# c# 获得本地ip地址的三种方法
# 也会
# 适用于
# 少了
# 可以看到
# 所示
# 不适合
# 想把
# 转换为
# 大家多多
# 如下图
# 完成了
# 是由于
# 正则表达式
# json
# CreateDate
# serialier
# DateTime
# lt
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JS去除重复并统计数量的实现方法
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何快速上传建站程序避免常见错误?
Laravel如何自定义分页视图?(Pagination示例)
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
Laravel如何实现API速率限制?(Rate Limiting教程)
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
公司门户网站制作流程,华为官网怎么做?
如何破解联通资金短缺导致的基站建设难题?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Android利用动画实现背景逐渐变暗
Laravel怎么连接多个数据库_Laravel多数据库连接配置
原生JS获取元素集合的子元素宽度实例
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
nodejs redis 发布订阅机制封装实现方法及实例代码
如何快速生成橙子建站落地页链接?
网站优化排名时,需要考虑哪些问题呢?
中国移动官方网站首页入口 中国移动官网网页登录
如何快速启动建站代理加盟业务?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何获取PHP WAP自助建站系统源码?
大型企业网站制作流程,做网站需要注册公司吗?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel如何实现用户注册和登录?(Auth脚手架指南)
高性能网站服务器配置指南:安全稳定与高效建站核心方案
iOS发送验证码倒计时应用
Python高阶函数应用_函数作为参数说明【指导】
重庆市网站制作公司,重庆招聘网站哪个好?
详解jQuery停止动画——stop()方法的使用
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Python制作简易注册登录系统
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何在IIS7中新建站点?详细步骤解析
如何快速建站并高效导出源代码?
Java类加载基本过程详细介绍
如何正确选择百度移动适配建站域名?
JS弹性运动实现方法分析
高端智能建站公司优选:品牌定制与SEO优化一站式服务
js代码实现下拉菜单【推荐】
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel如何实现API资源集合?(Resource Collection教程)
音乐网站服务器如何优化API响应速度?
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤

