从REST Wcf方法返回的JSON日期时间字段看起来很奇怪

时间:2013-11-28 19:36:32

标签: wcf rest

我正在开发一个小型的REST Wcf项目。我的一个WCF操作契约(方法)具有签名和装饰属性,设置如下:

[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetLatestOrder")]
OrderDto GetLatestOrder();

使用Fiddler测试该方法后,将返回JSON日期时间字段之一,如下所示:

"RequiredDate": "/Date(1383368400000-0500)/"

我的问题是返回的JSON日期时间格式是否正常?如果没有,我该如何解决这个问题?

谢谢。

P.S .:
我查看了How to return custom datetime format in WCF REST Service?处的另一个帖子,但似乎没有人回答该帖子。

1 个答案:

答案 0 :(得分:1)

我认为你遇到过WCF处理json的一个非常不幸的事情。

简而言之,与JSON规范相比,格式是正确的,它没有真正解决日期序列化问题,并且MS在没有真正标准的情况下将其烘焙。格式只是jlash标准序列化的日期,以斜杠为基础,使其易于解析。所以这本身并没有错。

问题在于,这是一种建议的标准,除了MS遵循的其他任何人都没有,因此与以任何其他格式编写的客户进行交互真的很麻烦。 (几年前,我已经让自己非常不受欢迎,因为他们使用上面提到的序列化格式提供服务。)

序列化由JavaScriptSerializer完成,Json.NET已在很大程度上被ServiceStack.TextThere is a relevant story and links here at Scott Hanselsmans blog.取代,两者均可在nuget处获得。如果将标准WCF与后者比较为序列化程序,则日期将表示为标准RFC日期。 (Implement Json.NET in WCF Message Formatter

这就是问题所在。解决方案不太明显,需要一些工作。这里有一个启动器:{{3}}

我有时会使用从WCF方法返回一个Stream,因为它可以让你完全控制序列化。但它使您的服务界面不那么可读,这有点像黑客。 (返回流的想法实际上是允许以块的形式写入非常大的结果,而不是为整个答案分配内存。)

Hanselman最后提到了WebAPI。这主要是我最近转向的。在使用HTTP协议时,它有适当的默认值。进行适当的JSON和XML序列化,更容易扩展并很好地适应mvc。但是它永远不会像WCF那样容易地集成tcp或msmq,并且配置选项不是无穷无尽的,尽管是明智的。