2011-02-10 18 views
0

WCF Webサービスから返されるDateTimeがあります。このDateTimeは、DataContract属性を持つCLRオブジェクトの一部です。 DateTimeは、DataMember属性が追加されたプロパティです。すべてが私のクライアント(Silverlightアプリケーション)に正しく返されています。JSONの日付/時刻をC#に変換するDateTime

私の質問は、DateTimeをシリアライズしてC#DateTimeオブジェクトに変換する方法です。

ありがとうございました!

+0

デシリアライズしますか? – Oded

+0

[DateTimeをJSONからC#に変換するにはどうすればいいですか?](http://stackoverflow.com/questions/249721/how-to-convert-datetime-from-json-to-c) –

+0

それをあなた自身で逆シリアル化します。プロジェクトへのサービス参照を追加するか、インターフェイスへの参照を追加して、チャネルファクトリをスピンアップしてください。フレームワークは残りの作業を行います。 –

答えて

3

Webサービスから返される日時は

\/Date(1297367252340-0500)\/ 

のような日付は、この奇妙な形式である理由は、DateTimeのは、WCFで原始的であるということである、奇妙な形式になります。残念ながら、JSONでは日時をシリアライズするための普遍的な標準化されたフォーマットはなく、さまざまなフレームワークでさまざまな文字列フォーマットが使用されています。

ジレンマは、ワイヤ上の特定の文字列が実際には別のプレーンなバニラJSON文字列ではなくDateTimeであることをネイティブに理解する必要があるということです。したがって、奇妙な形式です。 DataContractJsonSerializerが/ Dateで始まる日付を検出すると、それを日付として解析しようとします。

WCFクライアントまたはSilverlight 2以上のクライアントでは、この問題は発生しません。これらは、System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObjectまたはSystem.Web.Script.Serialization.JavaScriptSerializer.Deserializeを使用する必要があります。

Webクライアントを使用している場合は、ASPに付属の.jsファイルを含めることができます。 NET AJAX(名前は変更されているかもしれませんが、MicrosoftAspNetAjax.js、またはMicrosoftAjax.csと呼ばれていると思います)。そのdeserialize関数はこれらの日付も自動的に解析します。

希望に役立ちます!

関連する問題