2013-11-28 43 views
0

我正在处理一个小的REST Wcf项目。我的一个WCF操作契约(方法)有签名和装饰属性设置如下:从REST Wcf方法返回的JSON datetime字段看起来很奇怪

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

在测试时使用招,JSON日期时间字段的一个方法如下返回:

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

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

谢谢。

措施:
我看了另一个线程在How to return custom datetime format in WCF REST Service?,但似乎没有人回答该线程。

回答

1

我想你已经遇到过有关WCF处理json的一件非常不幸的事情。

简而言之,与JSON规范相比,格式是正确的,它并不真正解决日期序列化问题,并且MS在没有真正标准的情况下对其进行了烘培。格式只是斜线包围的日期的JavaScript标准序列化,以便轻松解析。所以它本身没有错。

问题是,这是一种建议的标准,没有其他人,但微软坚持,所以与其他任何格式的客户端交互是非常麻烦的。 (我已经作出了自己的Java和PHP的家伙很不得人心的作出使用上述序列化格式几年前的服务。)

序列化由JavaScriptSerializer,这在很大程度上是在其他Json.NET取代所做和ServiceStack.Text,均可在nuget处获得。如果您将标准WCF与后者比较为序列化程序,则日期表示为标准RFC日期。 (There is a relevant story and links here at Scott Hanselsmans blog.

这是问题所在。解决方案不太明显,需要一些工作。这里有一个starter:Implement Json.NET in WCF Message Formatter

我有时候使用WCF方法返回Stream,因为它可以让你完全控制序列化。但是它使得你的服务界面不易读,并且有点破解。 (使用返回流的想法实际上是允许以块的形式写入非常大的结果,而不是为整个答案分配内存。)

Hanselman在末尾提到了WebAPI。这在很大程度上是我最近谈到的。它在使用HTTP协议时有适当的默认值。使适当的JSON和XML序列化,更容易扩展并很好地适应mvc。但是它不会像WCF那样容易地集成tcp或msmq,而配置选项并不是无尽的,尽管是合理的。

+0

谢谢你的解释。 –

相关问题