处理WCF反序列化DateTime对象

6
我们有一个调度应用程序正在运行,它调用一个WCF服务来运行夜间作业。其中许多包括有关当前业务日期的信息。出于业务原因,调度服务器设置为GMT,但我们的服务运行在设置为纽约时间的服务器上。
这引发了一个问题; 日期被传递到我们的.NET服务时带有明确的时区信息。因此,当服务告诉应用程序以“2008-11-03 00:00:00 +0:00”的日期运行时,服务将其解释为“2008-11-02 19:00:00 -5:00”,导致日期错误。
调度程序行为是第三方和硬编码的,因此我们无法告诉调度程序省略时区偏移量。我们不希望始终将日期转换为GMT,因为我们的亚洲办事处很可能调用同一服务,我们会面临相同的问题。
有没有办法标记DataContract,甚至在低层控制它,以确保DateTime Kind将是未指定的?或者有没有一种方法可以使用DateTime确定创建它的原始信息,并在后处理步骤中将其转换回原始值?
如果有帮助的话,现在我们的合同相当简单。方法接受一个参数,该参数是从以下类派生的类。
[DataContract]
public class BaseTimeSensitiveParameters
{
    [DataMember] public DateTime? BusinessDate;
}

如果要将调度服务器设置为GMT,请将操作系统时区设置为GMT。 - Scott Weinstein
1个回答

4

如果我正确理解了问题,您可以在服务端使用 DateTime.ToUniversalTime() 来进行后处理解决。对于您的示例,这应该会给您一个值为“2008-11-03 00:00:00”且 Kind=DateTimeKind.Utc 的 DateTime。现在,如果您需要相同的值,但是作为本地时间或未指定时间,您可以使用 DateTime.SpecifyKind(DateTime, DateTimeKind) 设置 Kind 而不更改值。


1
是的...保留服务返回的UTC时间,由客户端进行转换或解释。 - Anderson Imes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接