我有一个webapi函数,它使用SqlConnection,SqlCommand等从T-SQL数据库中检索数据。我得到一个DataTable,我使用
转换为数据结构var foobars = ColumnMapping.DataTableToObjectList<Foobar>(dt)
Foobar类包含DateTime字段。
当我从webapi方法返回foobar时,这些日期时间将通过网络以下列格式发送:
2016-10-12T12:00:00
这似乎是一个没有时区的日期时间。 AngularJS会将其视为12:00,而javascript的Date.getHours()将返回14(我在+2时区)。
如果我在从Web api方法返回之前执行此操作:
foobar.d = foobar.d.ToUniversalTime();
该字符串将获得额外的Z
2016-10-12T12:00:00Z
并且AngularJS和javascript都会同意哪个时间(12:00,这也是入侵时间)。
如果我这样做
foobar.d = foobar.d.DateStart.ToLocalTime();
字符串将是
2016-10-12T14:00:00 + 02:00
和AngularJS和javascript都报告它是14:00,比预定时间多两个小时。)
由此,我得出结论
我不想“修补”每个DateTime对象,这将是一个错误源(包括在每个DateTime对象上调用ToUniversalTime())。
我可以在调用ColumnMapping.DataTableToObjectList时指定语言环境吗?
答案 0 :(得分:1)
在webapi中,您可以配置JsonFormatter以按您希望的方式序列化日期时间:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
}
}
这样你就不必为每个日期时间做这件事,假设我理解你的问题......