Serialisierung von Datetime zu Zeit ohne Millisekunden und gmt
-
01-07-2019 - |
Frage
Ich habe eine C # Klassendatei erstellt, indem eine XSD-Datei als Eingabe. Eine meiner Eigenschaften wie folgt aussehen:
private System.DateTime timeField;
[System.Xml.Serialization.XmlElementAttribute(DataType="time")]
public System.DateTime Time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
Wenn serialisiert, wird der Inhalt der Datei sieht nun wie folgt aus:
<Time>14:04:02.1661975+02:00</Time>
Ist es möglich, mit XmlAttributes auf dem Grundstück, um es ohne die Millisekunden zu machen und den GMT-Wert wie das?
<Time>14:04:02</Time>
Ist das möglich, oder muss ich zusammen eine Art von xsl / XPath-ersetzen-Magie hacken müssen, nachdem die Klasse serialisiert wurde?
Es ist keine Lösung, um das Objekt zu String zu ändern, weil es wie ein Datetime in dem Rest der Anwendung verwendet wird, und ermöglicht es uns, eine XML-Darstellung von einem Objekt zu erstellen, indem die XmlSerializer.Serialize () Methode verwendet.
Der Grund, ich brauche die zusätzliche Informationen aus dem Feld zu entfernen ist, dass das Empfangssystem nicht auf die w3c-Standards für den Zeit-Datentyp nicht entspricht.
Lösung
Sie könnten eine String-Eigenschaft erstellen, die die Übersetzung zu / von Ihrem Timefield Feld tut und auf dieser Stelle die Serialisierung Attribut legen Sie die die reale Datetime-Eigenschaft, dass der Rest der Anwendung verwendet.
Andere Tipps
Setzen Sie [XmlIgnore] auf der Zeit Eigenschaft.
Dann eine neue Eigenschaft hinzufügen:
[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); }
}