12

XSDファイルを入力として使用してC#クラスファイルを作成しました。私のプロパティの1つは次のようになります。

 private System.DateTime timeField;

 [System.Xml.Serialization.XmlElementAttribute(DataType="time")]
 public System.DateTime Time {
     get {
         return this.timeField;
     }
     set {
         this.timeField = value;
     }
 }

シリアル化すると、ファイルの内容は次のようになります。

<Time>14:04:02.1661975+02:00</Time>

プロパティにXmlAttributesを使用して、ミリ秒とGMT値なしでこのようにレンダリングすることは可能ですか?

<Time>14:04:02</Time>

これは可能ですか、それともクラスがシリアル化された後、ある種のxsl / xpath-replace-magicを一緒にハックする必要がありますか?

オブジェクトをStringに変更するソリューションではありません。これは、アプリケーションの残りの部分でDateTimeのように使用され、XmlSerializer.Serialize()メソッドを使用してオブジェクトからxml表現を作成できるためです。

フィールドから余分な情報を削除する必要がある理由は、受信システムが時間データ型のw3c標準に準拠していないためです。

4

2 に答える 2

24

[XmlIgnore] を Time プロパティに設定します。

次に、新しいプロパティを追加します。

[XmlElement(DataType="string",ElementName="Time")]
public String TimeString
{
    get { return this.timeField.ToString("yyyy-MM-dd"); }
    set { this.timeField = DateTime.ParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture); }
}
于 2008-09-19T13:04:45.357 に答える
14

timeField フィールドとの間で変換を行う文字列プロパティを作成し、アプリケーションの残りの部分が使用する実際の DateTime プロパティの代わりにシリアライゼーション属性を配置できます。

于 2008-09-19T12:52:10.130 に答える