2016-10-17 4 views
0

に私のようなXSD要素を持つXML Webサービスを消費しています:デシリアライズXMLのdateTime UTC

<xs:element nillable="true" type="xs:dateTime" name="ENDDATE"/> 

XMLは次のようになります。

<ENDDATE>2016-08-01T18:35:49+04:00</ENDDATE> 

を私はC#クラスを自動生成するためにXsd.exeではを使用これらを調べると、DateTimeオブジェクトにはシステムローカル時間の時刻が含まれ、Kind==Localとなります。

DateTimeインスタンスを強制的にUTC時刻にする方法はありますか?そのようなフィールドごとに自動生成されたクラスを手動でハッキングする必要はありませんか?

答えて

0

XSDを使用してこの動作を調整することはできません(hereを参照)。 ですから、(ハック)自動生成されたクラスを更新し、thereを説明したような何かをする必要があります

[XmlIgnore()] 
public DateTime Time { get; set; } 

[XmlElement(ElementName = "Time")] 
public string XmlTime 
{ 
    get { return XmlConvert.ToString(Time, XmlDateTimeSerializationMode.RoundtripKind); } 
    set { Time = DateTimeOffset.Parse(value).DateTime; } 
} 

それとも、あなたは本当に多くの場合、これらのクラスを自動生成する場合は、透過的に日時を変換するであろう、彼らのためにラッパーを導入することができますUTCへ。

+0

これはうまくいくかもしれませんが、いくつかのクラスでこのようなケースが20件あります。これを自動化する方法は優れています! –

+0

私は、コードジェネレータ、さらには3Dパーティツールを使用してコード生成を非常に深くカスタマイズする方法はないことに気づいています。快適な使い方のためには、拡張メソッドを使って変換を書くことができると考えていましたが、これはDateTimeプロパティを使用するたびに明示的に行うように強制します。 – grafgenerator