2013-11-28 38 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

謝謝你的解釋。 –

相關問題