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