这是一个古老的故事,由于json没有日期的默认格式。此外,格式/Date(.....)/假装用的.Net(.NET不仅仅是asp.net)不容易与所有现代浏览器允许的JSON定制也处理:
- 的第一个问题是浏览器json解析函数无法理解/Date(.....)/格式。这很容易通过定制Json解析来解决。网上有很多补丁。
- 将日期发送回服务器时出现同样的问题。但是在这种情况下,修补是非常困难的,因为当JSON.stringify方法接受一个函数来定制json序列化时,如果你传递一个将每个日期转换为字符串“/Date(.....)/”的函数。 ..然后stringify函数ADD furteh \并将其转换为:“\/Date(.....)\ /”,即它转义\ char ....但以这种方式转换的字符串不能理解DOTNET。另一方面,如果您将日期转换为/Date(.....)/...不添加转义字符,那么...在这种情况下,您将得到错误的编码。
- 此外,如果你解决了上述问题......往返服务器/客户端/服务器后日期返回更改。具体来说,时间轴偏移量是从原始日期中减去的......这是由于.NET和浏览器处理时间轴的方式不同。
- upshot只是调用浏览器JSON.stringify函数...所以它没有空间来定制日期。
,如果你使用MVC控件工具包项目的client blocks功能(我的协调人),你可以使用“增强型”基因敲除自动处理问题1和2在下一版本进来几个天我也将添加自动处理问题3. 但是...这不会解决结果的问题...因为我钩了knokout映射插件的映射功能,没有被upshot用来发回数据服务器......因为upshot直接调用JSON.stringify ...似乎没有办法解决这个问题......除了修改upshot以在发布数据时处理json自定义格式。
在客户端块的upcomig版本中,我将提供一个UpdateManager类,它可以完成与结果处理“相似”的工作,以便正确处理日期......但是,由于它使用了完全不同的更新策略,因此它永远不会取代结果...而且只是一个选项而已,不是替代品。 所以我希望在最终发布的结果中可以定制json格式的数据。
我在这里发现了JSON.net格式化日期的另一个问题。 如果我使用替换的JSON.Net格式化程序,那么日期会很好,并且可以很容易地转换为JS日期对象。 但如果你想发送实体回服务器 - 它失败。不知何故,如果格式化程序取代了defaultjson格式化程序,desrialisation似乎不起作用... – Obiwan007 2012-03-27 11:42:28