gpt4 book ai didi

c# - 处理 DateTime 对象的 WCF 反序列化

转载 作者:太空狗 更新时间:2023-10-29 21:48:17 24 4
gpt4 key购买 nike

我们有一个正在运行的调度应用程序,它调用 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;
}

最佳答案

如果我对问题的理解正确,您只需在服务端使用 DateTime.ToUniversalTime() 即可在后处理中解决此问题。对于您的示例,这应该为您提供一个值为“2008-11-03 00:00:00”且 Kind=DateTimeKind.Utc 的 DateTime。现在,如果您需要相同的值,但作为 Local 或 Unspecified,您可以使用 DateTime.SpecifyKind(DateTime, DateTimeKind) 来设置 Kind 而无需更改值。

关于c# - 处理 DateTime 对象的 WCF 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com