2008-09-19 19 views
11

He creado un archivo de clase C# utilizando un archivo XSD como entrada. Una de mis propiedades tener este aspecto:serialización DateTime al tiempo sin milisegundos y gmt

private System.DateTime timeField; 

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

Cuando serializado, el contenido del archivo ahora se ve así:

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

¿Es posible, con XmlAttributes en la propiedad, para que se deje sin los milisegundos y el valor GMT de esta manera?

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

Es esto posible, o tengo que cortar juntos algún tipo de XSL/XPath-reemplazar-magia después de la clase ha sido serializado?

No es una solución para cambiar el objeto a Cadena, porque se utiliza como un DateTime en el resto de la aplicación y nos permite crear una representación xml de un objeto utilizando el método XmlSerializer.Serialize() .

La razón por la que necesito eliminar la información adicional del campo es porque el sistema receptor no cumple con los estándares w3c para el tipo de datos de tiempo.

+0

Mira http://stackoverflow.com/questions/3534525/force-xmlserializer-to-serialize-datetime-as-yyyy-mm-dd-hhmmss – TNT

Respuesta

13

Puede crear una propiedad de cadena que realice la traducción a/desde su campo timeField y poner el atributo de serialización en lugar de la propiedad real DateTime que usa el resto de la aplicación.

+0

Tenía que hacer exactamente lo mismo hoy :) – leppie

+0

¿Esto también funcionará si más adelante necesitamos deserializar el mismo archivo? – Espo

+0

Espo: sí, verá el código en mi respuesta :) –

21

Ponga [XmlIgnore] en la propiedad Time.

A continuación, añada una nueva propiedad:

[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); } 
} 
+2

¿Es '" aaaa-MM-dd "' la cadena de formato correcta para un campo de tiempo? Si bien esta solución no funcionó para mí desde el primer momento, me llevó a una que sí lo hizo. Tuve que usar '" HH: mm: ss "', y obtuve de 'dateField' como este' get {return this.dateField.ToString ("HH: mm: ss"); } ' – OutstandingBill

Cuestiones relacionadas