【问题标题】:Error using DateTime 0001-01-01 in C# with WCF and JSON在带有 WCF 和 JSON 的 C# 中使用 DateTime 0001-01-01 时出错
【发布时间】:2013-11-12 09:33:23
【问题描述】:

我试图从返回 JSON 对象的 WCF 服务发送 DateTime 对象。除 0001-01-01 外,所有日期都可以正常工作。服务无法序列化这个,为什么会这样?

这些工作正常:

return DateTime.now;
return new DateTime(1,1,2);

但这些不起作用:

return new DateTime();
return new DateTime(0);
return new DateTime(1,1,1);

我的界面

    [OperationContract]
    [WebInvoke(Method = "GET",
       ResponseFormat = WebMessageFormat.Json,
       UriTemplate = "/GetTest")]
    DateTime GetTest();

除了服务没有返回任何数据外,没有任何崩溃。为什么呢?

【问题讨论】:

    标签: c# json wcf datetime


    【解决方案1】:

    WCF 和 JSON 在小日期方面存在问题。 (1/1/1000 之前的一切)都可以匹配这个问题。

    此外,默认日期时间日期为 1/1/1。这个值在 WCF 和 JSON 中由 NULL 表示,并且 NULL 处理将导致 No Result 根本,这是我认为你的代码出错的部分......

    当输入小日期时,我建议您尝试以下代码行:

    var date = new DateTime(1,1,1,0,0,0,DateTimeKind.Utc);
    

    (资源http://www.west-wind.com/weblog/posts/2008/Jun/23/Crashing-WCF-35-JSON-Services-with-DateTimeMinValue

    【讨论】:

    • 它不返回 NULL。首先,我有一个包含多个值的列表,包括 DateTime 对象,当 0001-01-01 发生时,根本没有返回任何结果。使用调试器时,没有任何崩溃。
    • 所以你不能在 WCF 和 JSON 中使用 new DateTime() 吗?接缝是个严重的问题
    • 编辑了帖子,我的意思是没有通过 WCF 给出结果。您看不到 NULL,但它是这样处理的。这就是为什么之后您将看不到任何结果的原因。也不会向您抛出任何错误。
    • 您能否编辑一些信息,说明为什么 WCF/JSON 无知的少数人(比如我!)会出现这个问题。我有好奇心,它让我着迷。
    • 我发现资源帖子比我的想法更有帮助:s
    【解决方案2】:

    我猜这是因为以下原因:DateTime's representation in milliseconds? 您不能将 datetime 设置为这样的值。

    【讨论】:

    • 在 C# 中像这样创建一个新的 DateTime 对象可以正常工作:new DateTime(0)。你能说出你的答案吗?
    • 你提到的构造调用DateTime.MinValue (msdn.microsoft.com/en-us/library/…)
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 2021-12-13
    • 1970-01-01
    • 2018-12-06
    • 2015-12-31
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多