2009-07-13 7 views
46

Necesito serializar/deserializar una fecha y hora en el formato aaaamMMdd para un archivo XML. ¿Hay algún atributo/solución alternativa que pueda usar para esto?¿Se puede especificar el formato para XmlSerialization de una fecha y hora?

+0

Puede manipular el captador y el colocador de la variable. Por ejemplo, tenía un Enum Sex {Desconocido, Femenino, Masculino} y tenía un setter de cuerdas que formattet m en masculino y f en femenino. El serializador xml también escribió f y m inseatd del nombre completo enum. Funcionó bien, pero casi no hay uso práctico para esto. – BlueWizard

Respuesta

55

No, no lo hay. Si está en ese formato, entonces no es un dateTime válido en lo que se refiere a XML Schema.

Lo mejor que puede hacer es la siguiente:

[XmlIgnore] 
public DateTime DoNotSerialize {get;set;} 

public string ProxyDateTime { 
    get {return DoNotSerialize.ToString("yyyyMMdd");} 
    set {DoNotSerialize = DateTime.Parse(value);} 
} 
+8

Vale la pena señalar: tanto un get/set debe estar presente. Pasé media hora depurando por qué mi propiedad no estaba siendo serializada. Resulta que no tenía 'conjunto', porque pensé: 'Nunca voy a cambiar este valor; ¿Por qué molestarse en escribir un juego? – spamguy

+1

@spamguy: XmlSerializer solo maneja las propiedades públicas con un conjunto público y público. –

18

XmlElementAttribute #DataType debe proporcionar lo que necesita:

[XmlElement(DataType="date")]  
public DateTime Date1 {get;set;} 

Esto hará que Fecha1 propiedad en serie al formato adecuado xml date.

+3

No, el problema es que necesitaba serializarlo en un formato de fecha xml no estándar. La solución aceptada es a lo que recurrí. – cjk

+1

Esto no funciona para mí, da un error de compilación. [XmlElement (DataType = "date")] funciona. –

+0

Gracias. Solucionado mi problema Estaba intentando eliminar el componente Time. ¡Aclamaciones! –

Cuestiones relacionadas