DataContractJsonSerializer序列化时间类型时转换为UTC溢出问题
问题描述
如下一个实体类,含有非空时间类型属性,默认是C#的最小时间,在使用DataContractJsonSerializer将该类对象序列化成JSON时,抛出异常信息:System.Runtime.Serialization.SerializationException:“在转换为 UTC 时,大于 DateTime.MaxValue 或小于 DateTime.MinValue 的 DateTime 值无法序列化为 JSON。”。
实体类
public class Post
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime CreateTime { get; set; }
}
序列化类
public class DataContractProvider
{
public string Serialize<T>(T value)
{
var serializer = GetJsonSerializer<T>();
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, value);
return Encoding.Default.GetString(stream.ToArray());
}
}
public T Deserialize<T>(string json)
{
var serializer = GetJsonSerializer<T>();
var bytes = Encoding.Default.GetBytes(json);
using (var stream = new MemoryStream(bytes))
{
return (T)serializer.ReadObject(stream);
}
}
private DataContractJsonSerializer GetJsonSerializer<T>()
{
return new DataContractJsonSerializer(typeof(T));
}
}
解决办法
尝试了如下几种方法:
1.将DateTime改成可空类型DateTime?,则可以序列化成功,但实际上该属性的时间类型为非空,因此不能算解决。
2.在构造DataContractJsonSerializer时,添加序列化设置DataContractJsonSerializerSettings,将时间格式设置一下即可成功序列化。设置如下:
private DataContractJsonSerializer GetJsonSerializer<T>()
{
var settings = new DataContractJsonSerializerSettings
{
DateTimeFormat = new DateTimeFormat("yyyy-MM-dd HH:mm:ss")
};
return new DataContractJsonSerializer(typeof(T), settings);
}
DataContractJsonSerializer序列化时间类型时转换为UTC溢出问题的更多相关文章
- 将服务器时间类型改为UTC(0000)
方法一: # timedatectl set-timezone UTC # timedatectl set-time "YYYY-MM-DD HH:MM:SS" # time ...
- SpringBoot序列化时间类型的问题
在使用sringboot的时候因为在配置文件中缺少一个配置项,所以导致查询出来的时间都是long类型的时间格式 因为springboot默认使用的是Jackson 这个时间显然不是我们所需要的,参考官 ...
- C# 读取 timestamp 时间戳 值为byte[] 类型时转换为时间戳字符串
C# 中如何读取出来的时间戳为 byte[] 类型的话,用以下方式转换成 16进制字符串 string tmpUfts = "0x"+ BitConverter.ToString( ...
- Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换
JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...
- 1 Java中的时间类型
总结:sql中的时间转 util的时间直接赋值即可:反过来,必须先吧util下的时间转换成毫秒,再通过sql的构造器生成sql的时间格式. 1 Java中的时间类型 java.sql包下给出三个与数据 ...
- JDK8新增时间类型用在JPA中的问题
之前数据库存储日期时间类型时一般POJO实体对应属性为java.util.Date,然后通过JPA注解指定它是日期格式或是日期时间格式,JDK8中新增了更好的时间API,如表示本地日期的LocalDa ...
- 解决nodejs中json序列化时Date类型默认为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...
- MySQL建表时,日期时间类型选择
MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- 将 expression 转换为数据类型 int 时发生算术溢出
将 expression 转换为数据类型 int 时发生算术溢出错误 2种快速处理方法 1.CONVERT(bigint, 字段名): 2.Cast(字段名 as decimal(18,2)): 这个 ...
随机推荐
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- rocketMq概念介绍
rocketMq官网 http://rocketmq.apache.org/ rocketMq逻辑概念介绍 rocketMq逻辑图 备注: 改图片分享自李占卫的网上家园 说明: 在rocketM ...
- execCommand的复制
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Python类中的self到底是干啥的
Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...
- KVM之十:虚拟机在线添加网卡
1.查看原有网卡信息 #virsh domiflist snale Interface Type Source Model MAC ---------------------------------- ...
- lua向文件中写入数据,进行记录
function readfile(path) local file = io.open(path, "r") if file then local content = file: ...
- SpringMVC DispatcherServlet 启动和加载过程(源码调试)
在阅读本文前,最好先阅读以下内容(当然,如果对 Servlet 已经有所了解,则可跳过): http://www.cnblogs.com/cyhbyw/p/8682078.html http://ww ...
- 201621123060《JAVA程序设计》第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 用 ...
- 学号:201621123032 《Java程序设计》第14周学习总结
1:本周学习总结 2:使用数据库技术改造你的系统 2.1:简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 建立一个图书馆的表 建立读者用户个人的借书信息表---但是目前没有办法做到 ...
- C程序第一次作业
1-1 计算两数的和与差 1 设计思路 (1)主要描述题目算法 第一步:利用指针psum接收sum的地址,指针pdiff接收diff的地址,因此 * psum为sum, * pdiff为diff. 第 ...