2009-08-06 16 views
1

XmlAttributeタグに似た何かを使って、DateTimeをシリアル化/逆シリアル化する方法を定義する方法はありますか?過去には、私は、フィールドの文字列になるだろうし、その後、コンストラクタの中でこのような何かを実行します。ただしXmlDateTimeSerializationModeを使用してXML DateTime属性にタグを付ける方法は?

this.DateField = XmlConvert.ToString(passedObject.Date, XmlDateTimeSerializationMode.Utc); 

、私は実際にフィールドが日時も持っているし、何とかそれは次のようにシリアル化する必要があることをタグ付けしたいのですがUTC:

[System.Xml.Serialization.XmlAttribute()] // XmlDateTimeSerializationMode tag here? 
public DateTime DateField; 

どうすればよいですか?

+0

私はズールー(UTC)としてシリアル化されていない日付に問題がありました。その日付は、私が思っていたとしても_NOT_ UTCだったからです。もう一度コードをチェックしてください!あなたは、いくつかの必要なSpecifyKind(...、... UTC)呼び出しを見逃しました。 (XMLシリアル化された日付の最後にZを付けることができない次の人のためのメモ) –

+0

@マーク・ハードちょうど明確にする。 * XmlSerializer *を使用してXMLを逆シリアル化し、XML内で* xs:dateTime *値に "Z"が追加された場合、* DateTime *プロパティの* DateTime.Kind *プロパティは* DateTimeKindに設定されます。 Utc。*これは正しいですか? – RunnerRick

+0

@RickRoth私はそう思いますが、分かりません。私たちのアプリケーションはシリアル化にしか使用していません。 –

答えて

1

属性を使用して、データをそのままシリアル化することから、それを変換してシリアル化することができます。

あなたはおそらくすなわち、UTC保護されたプロパティを追加することによって、あなたはデータを表現する方法を変更することにより、同じ結果を得ることができます:

public DateTime DateField; 

[System.Xml.Serialization.XmlAttribute("DateField")] 
protected DateTime UtcDateField 
{ 
    get 
    { 
     //Convert DateField to UTC 
    } 

    set 
    { 
     DateField = //Convert value from UTC 
    } 
} 
+0

ありがとうMatt!実際には、実際のDateFieldにXmlIgnore属性を追加する必要がありました。それ以外の場合は、それを要素としてシリアル化します。 –

0

別のオプションはIXmlSerializableインターフェースを継承し、すべての読み取りを処理することであり、シリアル化を手動で書きます。それは属性として簡潔または自動ではありませんが、必要なコントロールを提供します。シリアル化プロセスのためだけに特別な書式設定されたフィールドを作成するよりも理解しやすいと思います。

関連する問題