DateTime をミリ秒と gmt なしで時刻にシリアル化する
-
01-07-2019 - |
質問
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 標準に準拠していないためです。
解決
timeField フィールドとの間の変換を行う文字列プロパティを作成し、アプリケーションの残りの部分が使用する実際の DateTime プロパティの代わりにシリアル化属性をそのプロパティに置くことができます。
他のヒント
Time プロパティに [XmlIgnore] を設定します。
次に、新しいプロパティを追加します。
[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); }
}
所属していません StackOverflow