tdelepineのコード スニペットを拡張するために、ここで使用したコードは次のとおりです。
私の WCF JSON サービスには、(null 許容の) DateTime 値があり、iPhone アプリがそれを解釈できるように、サービスがより読みやすい形式で日付を返すようにしたかったのです。
いくつかの変更を適用した後の JSON は次のようになります。
UpdateDateOriginal
WCF が DateTimes を書き込むデフォルトの方法であるフィールドとUpdateDate
、以下のコードを使用して作成したわかりやすいフィールドに注意してください。
私の元の行は次のようになりました。
[DataMember]
public DateTime? UpdateDateOriginal { get; set; }
... そして、より使いやすい新しいUpdateDate
JSON 値を作成するための行を以下に示します。
[IgnoreDataMember]
public DateTime? UpdateDate { get; set; }
[DataMember(Name = "UpdateDate")]
private string UpdateDateString { get; set; }
[OnSerializing]
void OnSerializing(StreamingContext context)
{
if (this.UpdateDate == null)
this.UpdateDateString = "";
else
this.UpdateDateString = this.UpdateDate.Value.ToString("MMM/dd/yyyy HH:mm", CultureInfo.InvariantCulture);
}
[OnDeserialized]
void OnDeserializing(StreamingContext context)
{
if (this.UpdateDateString == null)
this.UpdateDate = null;
else
this.UpdateDate = DateTime.ParseExact(this.UpdateDateString, "MMM/dd/yyyy HH:mm", CultureInfo.InvariantCulture);
}
DateTime
実際には、ISO8601 形式で値を返す方が便利な場合があります。例えば:
UpdateTime: "2014-08-24T13:02:32",
これを行うには、単純に上記のコードを使用しますが、文字列"MMM/dd/yyyy HH:mm"
を"s"
両方の場所で に変更します。
また、DateTime 値が UTC で保存されているが、WCF サービスがユーザーのローカル タイムゾーンで値を返すようにしたい場合は、次のヒントに従ってください。
ユーザーのローカル タイムゾーンで DateTime を取得する
いくつかの簡単な例で、人生はより簡単ではありませんか!