Question

J'ai créé un fichier de classe C # en utilisant un fichier XSD comme entrée. Une de mes propriétés ressemble à ceci:

 private System.DateTime timeField;

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

Une fois en série, le contenu du fichier se présente comme suit:

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

Est-il possible, avec XmlAttributes sur la propriété, de l'afficher sans les millisecondes et la valeur GMT comme celle-ci?

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

Est-ce possible ou dois-je pirater une sorte de xsl / xpath-replace-magic après la sérialisation de la classe?

Ce n'est pas une solution pour changer l'objet en String, car il est utilisé comme un DateTime dans le reste de l'application et nous permet de créer une représentation xml à partir d'un objet en utilisant la méthode XmlSerializer.Serialize ().

La raison pour laquelle j'ai besoin de supprimer les informations supplémentaires du champ est que le système récepteur n'est pas conforme aux normes w3c pour le type de données time.

Était-ce utile?

La solution

Vous pouvez créer une propriété de chaîne qui effectue la traduction vers / à partir de votre champ timeField et y placer l'attribut de sérialisation à la place de la véritable propriété DateTime utilisée par le reste de l'application.

Autres conseils

Placez [XmlIgnore] sur la propriété Time.

Ajoutez ensuite une nouvelle propriété:

[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); }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top