Javascript 客户端上未反序列化具有DateTime属性的服务器端投影

Javascript 客户端上未反序列化具有DateTime属性的服务器端投影,javascript,breeze,Javascript,Breeze,我在服务器上定义了一个投影(IQuerable-匿名类型)。匿名类型包含DateTime属性,这些属性不会在客户端上反序列化,而是保留字符串 我怎样才能像breeze通常那样轻松地将它们转换为JS DateTime对象 我有默认的WebApi配置。如果您需要手动反序列化它们,那么我找到的最好的库是 它应该简单到:var m=moment(“DATE\u as\u STRING\u HERE”)

我在服务器上定义了一个投影(IQuerable-匿名类型)。匿名类型包含DateTime属性,这些属性不会在客户端上反序列化,而是保留字符串

我怎样才能像breeze通常那样轻松地将它们转换为JS DateTime对象


我有默认的WebApi配置。

如果您需要手动反序列化它们,那么我找到的最好的库是

它应该简单到:
var m=moment(“DATE\u as\u STRING\u HERE”)m.toDate()

矩处理开箱即用,我发现它与WebApi配合得很好

更新

从文档中:

The following ISO-8601 formats are supported across all browsers.

"YYYY-MM-DD"
"YYYY-MM-DDTHH"
"YYYY-MM-DD HH"
"YYYY-MM-DDTHH:mm"
"YYYY-MM-DD HH:mm"
"YYYY-MM-DDTHH:mm:ss"
"YYYY-MM-DD HH:mm:ss"
"YYYY-MM-DDTHH:mm:ss.SSS"
"YYYY-MM-DD HH:mm:ss.SSS"
"YYYY-MM-DDTHH:mm:ss Z"
"YYYY-MM-DD HH:mm:ss Z"
Note: Automatic cross browser ISO-8601 support was added in version 1.5.0
以及:

js会检测您是否正在使用ISO-8601字符串,并且 无需格式字符串即可正确解析


因此,似乎是的,它应该很好地解析ISO-8601字符串(实际上,这是它首选的字符串格式)。

我最终使用了
breeze.DataType.parseDateFromServer(dateString)-不知道这是否是最佳的,但它在默认WebApi配置下工作正常。

矩需要字符串末尾的“Z”将日期解析为UTC。相比之下,Breeze将没有时区信息的日期视为UTC。

我已经使用了moment.js;我只是不确定它解析字符串的方式是否与breeze.js(ISO 8601)相同;我应该试一试,因为它看起来像是moment.js“检测您是否使用ISO-8601字符串,并在没有格式字符串的情况下正确解析它”。非常感谢。这是一个好办法。对于匿名类型,Breeze不“知道”单个属性的数据类型,因此它只保留数据。使用parseDateFromServer也是正确的方法,因为它可以确保浏览器之间的一致性。默认情况下,大多数日期都是在没有时区信息的情况下序列化的(因为datatabe上不存在此数据),因此如果找不到显式时区,parseDateFromServer方法将添加“Z”。这是必要的,因为不同的浏览器对没有时区的UTC日期的处理方式不同,但如果指定了时区,则所有浏览器都是一致的