首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么DateTime.MinValue不能在协调世界时之前按时区序列化?

为什么DateTime.MinValue不能在协调世界时之前按时区序列化?
EN

Stack Overflow用户
提问于 2010-10-27 00:43:43
回答 7查看 33.1K关注 0票数 55

我遇到了WCF REST服务的问题。我尝试返回的wire对象没有设置某些属性,导致DateTime类型的属性为DateTime.MinValue。该服务返回一个空文档( HTTP状态为200?)。当我自己尝试调用JSON序列化时,抛出的异常是:

SerializationException:转换为DateTime时大于DateTime.MaxValue或小于DateTime.MinValue的JSON值无法序列化为JSON值。

这可以通过在控制台应用程序中运行以下代码来重现:

代码语言:javascript
运行
复制
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;

// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);

为什么会出现这种行为?我认为这与我的时区(GMT+1)有关。因为DateTime.MinValue是缺省的(DateTime),所以我希望它可以顺利地序列化。

关于如何让我的REST服务表现良好,有什么建议吗?我不想更改我的DataContract。

EN

Stack Overflow用户

发布于 2020-04-25 03:57:19

可以通过指定自定义DateTimeFormat来避免这个问题(使用WriteDateTimeInDefaultFormat方法):

代码语言:javascript
运行
复制
DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
settings.DateTimeFormat = new DateTimeFormat("yyyy-MM-ddThh:mm:ss.fffZ");
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyDataContract), settings);

请注意,您应该确保UTC的值确实是以UTC为单位的,但这对于使用DateTime.MinValue是安全的。

有关正在使用的DateTimeFormat的其他详细信息,请参阅this

票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4025851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档