C# WCF服务和JavaSerializer解码器中的日期问题
跨时区工作最糟糕的问题之一:) 我的问题是:C# WCF服务和JavaSerializer解码器中的日期问题,c#,wcf,datetime,json,C#,Wcf,Datetime,Json,跨时区工作最糟糕的问题之一:) 我的问题是: 我的代码通过JSON对象将日期传递到WCF,我使用“short”格式,其中自1970年以来只包含毫秒,没有时区。这个日期时间被WCF解析得很好 我将日期存储到SQL Server数据库中。示例:2011-06-07 22:17:01.113-我在SQL Server中看到的日期,这非常好,因为我将所有内容都存储在UTC中。所以,这是(-5)个时区,日期看起来是对的 我使用EF将日期字段加载到我的对象中,对象的内部属性表示它是22:17,并且Kind=
var oSerializer = new JavaScriptSerializer();
var returnValue = (T)oSerializer.Deserialize(s, typeof(T));
我已经很困惑了,我想知道是否有可能强制WCF和其他序列化程序/反序列化程序不执行任何时间偏移和其他操作?我希望手动设置所有日期的格式,并将UTC日期存储在数据库中
更新:
看起来WCF认为如果DateKind未指定,那么它是本地的。
我这样做了:从EF获得对象后,我指定了一种:
foreach (var tu in tripUpdates)
{
tu.DeviceTime = DateTime.SpecifyKind(tu.DeviceTime, DateTimeKind.Utc);
}
这修正了它-现在当WCF服务对象时,它不包括时区,这很好。现在我的主要问题是,有没有办法以某种方式指定EF实体的种类,这样我就不必为服务中的每个日期手动指定种类?当您通过SELECT语句获取datetime时,请始终将datetime.Kind设置为UTC。这样,WCF/XML将不会尝试调整时间。请参阅我的更新。是的。现在我想知道如何神奇地处理这台自动变速器:)也许这是另一个问题?@katit你能问这个问题吗?:)@沃尔-我已经在谷歌上搜索过了-看起来在EF中没有办法做到这一点。一种选择是移动到DateTimeOffset,但这比它的价值更麻烦。我有自己的手工编写的JSON类,我只是把代码放在那里指定种类,并将使用它完成。。