2017-06-26 76 views
2

我目前從.net MVC5網站調用rest api,並使用AutoRest(0.17.3)從其餘api swagger.json生成代碼。Json序列化更改DataTime

它完全正常工作,但它使用put方法時將一個字段的日期時間改變了一個小時。我發現這個地方的,是造成這一問題的自動生成的代碼:

_requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(value, this.SerializationSettings); 

這似乎是改變的時候它系列化對象爲JSON。

我已經在web.config中設置了文化,但我們仍然有同樣的問題。

有誰知道如何解決這個問題?如果全球可能的話,所以我們不必更改自動生成的代碼。否則,我們必須記住,每次我們重新生成代碼時都要進行此更改。

非常感謝

安迪

+4

這是一個時區問題。應該將服務器上的所有時間都作爲UTC處理,並在瀏覽器中轉換爲本地時間。串行器可能在序列化過程中自動將時間轉換爲UTC。 – Will

回答

0

我相信你的數據的時間值指定爲本地時間(有產權Kind等於DateTimeKind.Local)。這就是爲什麼這個值是隨時間變化序列化的原因。如果將此屬性更改爲DateTimeKind.Utc,則數據值將被序列化而不更改。看例子:

var local = DateTime.Now; 
var utc = DateTime.SpecifyKind(local, DateTimeKind.Utc); 

var _requestContentLocal = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(local); 
var _requestContentUTC = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(utc); 

_requestContentLocal "\"2017-06-29T18:19:32.6704837+03:00\"" 
_requestContentUTC "\"2017-06-29T18:19:32.6704837Z\""