2017-06-26 9 views
2

私は現在、.net MVC5 Webサイトから残りのAPIを呼び出し、残りのAPI swagger.jsonからコードを生成するためにAutoRest(0.17.3)を使用しています。Jsonシリアル化の変更DataTime

これは完全に動作していますが、putメソッドを使用すると、1時間ごとにフィールドの日時が変更されています。私は、問題を引き起こしている、自動生成されたコードで場所を発見した:

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

それはそれはJSONにオブジェクトをシリアライズする時間を変更しているようです。

web.configでカルチャを設定しましたが、私たちはまだ同じ問題を抱えています。

誰もこの問題を解決する方法を知っていますか?グローバルに可能な場合は、自動生成コードを変更する必要はありません。それ以外の場合は、コードを再生成するたびにこの変更を行うことを忘れないでください。

感謝

アンディ

+4

タイムゾーンの問題です。サーバー上のすべての時刻は、UTCとして処理され、ブラウザーで現地時間に変換されます。シリアライザはおそらく、シリアライゼーション中に自動的に時刻をUTCに変換しています。 – Will

答えて

0

は、私はあなたのデータの時間値が現地時間(持つプロパティKindDateTimeKind.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\"" 
関連する問題