处理WCF反序列化DateTime对象

我们有一个运行的调度应用程序调用WCF服务来运行夜间作业。 其中大量包括有关当前营业日期的信息。 出于商业原因,调度服务器设置为GMT,但我们的服务在设置为NY时间的服务器上运行。

这引发了一个问题; 日期将通过显式时区信息传递给我们的.NET服务。 因此,当服务告诉应用程序以“2008-11-03 00:00:00 +0:00”的日期运行时,服务会将其解释为“2008-11-02 19:00:00 -5:00” “事情与错误的日期一起运行。

调度程序行为是第三方和硬编码的,因此我们无法告诉调度程序省略时区偏移。 我们不希望总是将日期转换为GMT,因为我们的亚洲办事处很可能会调用相同的服务,我们将回到同样的问题。

有没有办法标记DataContract,甚至控制它在足够低的水平,以确保DateTime种类将是未指定的? 或者有没有办法使用DateTime来确定用于创建它的原始信息是什么,并在后处理步骤中将其转换回原始值?

如果它有帮助,那么我们现在的合同相当简单。 方法采用一个参数,该参数是从下面的类派生的类。

[DataContract] public class BaseTimeSensitiveParameters { [DataMember] public DateTime? BusinessDate; } 

如果我正确理解了这个问题,你可以在后期处理中通过简单地在服务端使用DateTime.ToUniversalTime()来解决这个问题。 对于您的示例,这应该为您提供值为“2008-11-03 00:00:00”和Kind = DateTimeKind.Utc的DateTime。 现在,如果您需要相同的值,但是需要Local或Unspecified,则可以使用DateTime.SpecifyKind(DateTime, DateTimeKind)来设置Kind而不更改值。